1

我正在使用 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')
     );
 }
 ?>

我试图将汽车与地址联系起来,但我无法让它工作......如果我这样做,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'
    )
)
)

我首先想要的是在每辆车中都有一个数组“地址”......

谢谢!

4

2 回答 2

2

从您所描述的情况来看,您的关联看起来是错误的。他们应该是这样的: -

用户

<?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 行为,您应该能够使用以下内容恢复所有内容:-

$this->User->find(
    'all',
    array(
        'contain' => array(
            'Address',
            'Car' => array( 
                'Address'
            )
        )
    )
);
于 2015-06-12T14:49:33.450 回答
1

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

顺便说一句,我认为您的Address模型中有错误,因为地址不“属于”用户,但可以有很多。User正如您在模型中所做的那样,它应该是一个 HABTM 关系。

于 2015-06-12T14:41:52.893 回答