我正在使用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'
)
)
)
我首先想要的是每辆车都有一个阵列&#34;地址&#34; ......
谢谢!
答案 0 :(得分: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 behavior,您应该可以使用以下内容获取所有内容: -
$this->User->find(
'all',
array(
'contain' => array(
'Address',
'Car' => array(
'Address'
)
)
)
);
答案 1 :(得分:1)
要控制从find()
查询中确切检索的内容,您可以使用API documentation。
顺便说一句,我认为你的Address
模型中有一个错误,因为地址不属于“用户”,但可能有很多。它应该是您在User
模型中所做的HABTM关系。