CakePHP 2.6.7 hasMany数据未保存

Wil*_*del 6 php cakephp web cakephp-2.6

我正在使用CakePHP 2.6.7.

用户将能够将多个汽车和多个地址添加到他的个人资料中.他还可以将多个地址链接到一辆车,并将一个地址链接到多辆车.

然后,我有一个用户模型:

class User extends AppModel {
    public $hasMany = array(
        'Car',
        'Address'
    );
}
Run Code Online (Sandbox Code Playgroud)

汽车模型:

class Car extends AppModel {
    public $belongsTo = array(
        'User'
    );

    public $hasAndBelongsToMany = array(
        'Address' =>
            array(
                'unique' => 'keepExisting'
            )
    );
}
Run Code Online (Sandbox Code Playgroud)

一个地址模型:

class Address extends AppModel {
    public $hasAndBelongsToMany = array(
        'Car' =>
            array(
                'unique' => 'keepExisting',
            ),
    );

    public $belongsTo = array(
        'User'
    );
}
Run Code Online (Sandbox Code Playgroud)

我有一个表单,以便用户可以编辑他的汽车(目前只有一个):

[...]

        <legend>Mes voitures</legend>

        <?php
            for($nbrvoiture = 0; $nbrvoiture <= 0; $nbrvoiture++)
            {
                ?><h3>Voiture <?php echo $nbrvoiture+1?></h3><?php
                $myLabelOptions = array('text' => "Marque");
                echo $this->Form->input('Car.'.$nbrvoiture.'.CarMake', array('label' => array_merge($mainLabelOptions, $myLabelOptions)));

                $myLabelOptions = array('text' => "Modèle");
                echo $this->Form->input('Car.'.$nbrvoiture.'.CarModel', array('label' => array_merge($mainLabelOptions, $myLabelOptions)));

                $myLabelOptions = array('text' => "Plaque d'immatriculation");
                echo $this->Form->input('Car.'.$nbrvoiture.'.NumberPlate', array('label' => array_merge($mainLabelOptions, $myLabelOptions)));


                echo $this->Form->submit("Valider", array(
                    'class' => 'btn btn-default col-sm-offset-2'
                ));
            }
Run Code Online (Sandbox Code Playgroud)

问题是我无法将数据保存到我的数据库中.以下是用户控制器代码的一部分:

function edit() {
    // On récupère l'ID de l'utilisateur
    $user_id = $this->Auth->user('id');

    // Si l'utilisateur n'a pas d'ID => il n'est pas connecté => il ne peut pas éditer son profil
    if(!$user_id){
        $this->redirect('/');
        die();
    }

    debug($this->User->find('all'));

    $this->User->id = $user_id;
    $passError = false;

    if($this->request->is('put') || $this->request->is('post')){
        $d = $this->request->data;

        $d['User']['id'] = $user_id;
        debug($d);


        if($this->request['pass'][0]=='cars')
        {

            if($this->User->saveAssociated($d, array('deep' => true))){
                $this->Session->setFlash(__("Les informations sur la voiture ont bien été modifiées"), 'alert', array (
                    'plugin' => 'BoostCake',
                    'class' => 'alert-success'
                ));
            }else{
                $this->Session->setFlash(__("Impossible de modifier ou d'ajouter les infos"), 'alert', array (
                    'plugin' => 'BoostCake',
                    'class' => 'alert-danger'
                ));
            }
        }
Run Code Online (Sandbox Code Playgroud)

保存数据时,会显示错误.

在我的数据库中,我有这4个表:

Users(id, username, mail, password, created, lastlogin, active, firstname, lastname, gender, birthdate, phonenumber)
Cars(id, CarMake, CarModel, NumberPlate, user_id)
Addresses(id, address, city, state, postcode, country, user_id)
Addresses_cars(address_id, car_id)
Run Code Online (Sandbox Code Playgroud)

这是我从表单中获得的一个例子($ d变量):

array(
    'Car' => array(
        (int) 0 => array(
            'CarMake' => 'Allard',
            'CarModel' => '2005',
            'NumberPlate' => '56QDS1'
        )
    ),
    'User' => array(
        'id' => '1'
    )
)
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它不起作用...你能帮帮我吗?

谢谢 !:)

编辑:我也试过SaveAll但我无法让它工作..出了什么问题?

Dav*_*ave 1

它已经被 OP 解决了,但是对于未来的 CakePHPers,如果你有一个save()saveAll()没有保存(由你的if:else块检查),最常见的问题是验证错误。

CakePHP 2.x 数据验证

CakePHP 3.x 数据验证

如果不是这样,请尝试查看您正在使用的任何行为,并检查是否有任何应该返回 true 且没有返回 true 的地方(例如“beforeSave() 方法”)。