我有关于mongodb,模型cakephp和关系的问题。
我创建了以下关系:
用户 - > hasMany - >市
城市 - > belongsTo - >用户
在MongoDB中,我有两个表:
用户 城市(具有关键user_id)
在cakephp中,我有2个型号: user.php的
类用户扩展模型{
public $ name ='用户';
public $ actsAs = array('Containable');
public $ hasMany = array('City');
..
}
和: City.php
class City扩展模型{
public $ name ='City';
public $ actsAs = array('Containable');
public $ belongsTo = array('User');
.. }
在我的控制器中,我使用:
$ user = $ this-> User-> find('all');
但它不起作用。在sql dump中,cakephp仅在tbl用户上使用find。 为什么?哪里错了?
答案 0 :(得分:0)
我通常将递归放置到-1并且可以在app模型中包含,因此它适用于您创建的所有模型,除非您专门覆盖。
class AppModel extends Model {
public $actsAs = array('Containable');
public $recursive = -1;
}
你的关系很好,虽然我通常添加className和foreignKey只是为了安全和清晰。在您的控制器中,您应该执行以下操作:
$users = $this->User->find('all', array(
'contain' => array(
'City'
)
));
递归会阻止默认包含任何关联的记录,这很好,因为有时您不需要递归数据,额外的数据将有助于减慢您的应用程序。
接下来,在您的查找调用中添加包含可能看起来像是一件苦差事,但它会清楚简明您所查询的内容,任何第三方开发人员如果知道如何使用Cake,都会明白您正在做什么。希望这会有所帮助。