在 CakePHP2 中将模型链接在一起时出现问题

Trouble linking models together in CakePHP2

我正在使用 CakePHP 2.6.7。

这是我的数据库(简体):

***Users***
id
username

***Cars***
id
CarMake
CarModel
NumberPlate
user_id

***Addresses***
id
address
postalcode
city
country

***Addresses_Users***
user_id
address_id

这就是我想要的:

所以现在我有一个模型 User.php :

<?php
class User extends AppModel {

     public $hasMany = array(
         'Car' => array(
             'classname' => 'Car')
     );

     public $hasAndBelongsToMany = array(
         'Address' => array(
             'classname' => 'Address')
     );
?>

还有一个模型Car.php:

<?php
class Car extends AppModel {

     public $belongsTo = array(
         'User' => array(
             'className' => 'User'
         )
     );

     public $hasMany = array(
         'Address' => array(
             'classname' => 'Address')
     );
}
?>

还有一个模型 Address.php :

<?php
class Address extends AppModel {

     public $belongsTo = array(
         'User' => array(
             'className' => 'User'
         ),

         'Car' => array(
             'classname' => 'Car')
     );
 }
 ?>

我尝试 link 有地址的汽车,但我无法让它工作... 如果我执行 debug($this->User->find()); 我会得到这样的结果:

array(
'User' => array(
    'id' => '1',
    'username' => 'wblondel',
),
'Car' => array(
    (int) 0 => array(
        'id' => '2',
        'CarMake' => 'Allard',
        'CarModel' => '2005',
        'NumberPlate' => '56QDS1',
        'user_id' => '1',
    ),
    (int) 1 => array(
        'id' => '5',
        'CarMake' => 'Alvis',
        'CarModel' => '25',
        'NumberPlate' => '5lDS1',
        'user_id' => '1',
    )
),
'Address' => array(
    (int) 0 => array(
        'id' => '2',
        'address' => 'fghfghgf',
        'postalcode' => '78200',
        'city' => 'buchelay',
        'country' => '40'
    ),
    (int) 1 => array(
        'id' => '3',
        'address' => 'jkjkjk',
        'postalcode' => '69100',
        'city' => 'villeurbanne',
        'country' => '59'
    )
)
)

我首先想要的是在每辆车中有一个数组"address"...

谢谢!

要控制从 find() 查询中检索到的内容,您可以使用 ContainableBehavior.

顺便说一下,我认为您的 Address 模型有误,因为地址不是 "belong to" 用户,但可以有很多用户。它应该是一个 HABTM 关系,就像您在 User 模型中所做的那样。

根据您的描述,您的联想似乎是错误的。它们应该是这样的:-

用户

<?php
class User extends AppModel {

    public $hasMany = array(
        'Car'
    );

    public $hasAndBelongsToMany = array(
        'Address'
    );
}

汽车

<?php
class Car extends AppModel {

    public $belongsTo = array(
        'User'
    );

    public $hasAndBelongsToMany = array(
        'Address'
    );
}

地址

<?php
class Address extends AppModel {

    public $hasAndBelongsToMany = array(
        'Car',
        'User'
    );
}

您不需要使用className,除非您要使用的别名与模型名称不同或模型属于插件。

然后,如果您使用 Containable behavior,您应该能够使用类似以下的方法取回所有内容:-

$this->User->find(
    'all',
    array(
        'contain' => array(
            'Address',
            'Car' => array( 
                'Address'
            )
        )
    )
);