CakePHP HABTM过滤

时间:2010-12-21 17:32:15

标签: php mysql cakephp cakephp-1.3 has-and-belongs-to-many

我有两个表 - usersservers,而且对于HABTM关系,users_servers。用户HABTM服务器,反之亦然。

我正在尝试为Cake找到一种方法来选择分配给用户的服务器。

我正在尝试像$this->User->Server->find('all');那样只返回所有服务器的东西,无论它们是否属于用户。

$this->User->Server->find('all', array('conditions' => array('Server.user_id' => 1)))只会给出一个未知的列SQL错误。

我确信我错过了一些显而易见的事情,但只需要有人指出我正确的方向。

谢谢!

2 个答案:

答案 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)

我认为您应该为表用户服务器命名。