我有两个表 - users
和servers
,而且对于HABTM关系,users_servers
。用户HABTM服务器,反之亦然。
我正在尝试为Cake找到一种方法来选择分配给用户的服务器。
我正在尝试像$this->User->Server->find('all');
那样只返回所有服务器的东西,无论它们是否属于用户。
$this->User->Server->find('all', array('conditions' => array('Server.user_id' => 1)))
只会给出一个未知的列SQL错误。
我确信我错过了一些显而易见的事情,但只需要有人指出我正确的方向。
谢谢!
答案 0 :(得分:1)
你的表名是对的。有很多方法可以做到这一点:
使用包含行为
在AppModel中,设置以下内容:
var $recursive = -1;
var $actsAs = array('Containable');
然后,使用以下代码查询您的服务器:
$userWithServers = $this->User->find('all', array(
'conditions' => array('User.id' => 1),
'contain' => array('Server')
));
请注意,我们正在查询用户模型,而不是服务器模型来完成此操作。
使用bindModel
$this->Server->bindModel(array('hasOne' => array('UsersServer')));
$this->Server->find('all', array(
'fields' => array('Server.*'),
'conditions' => array('Server.user_id' => 1)
));
我个人不建议使用bindModel。最终,您的代码变得有点难以管理。您应尽可能尝试使用Containable行为。代码看起来更简洁。有关bindModel方法的更多信息,请参见here。
HTH。
答案 1 :(得分:0)
我认为您应该为表用户服务器命名。