1
votes

I've got two tables - users and servers, and for the HABTM relationship, users_servers. Users HABTM servers and vice versa.

I'm trying to find a way for Cake to select the servers that a user is assigned to.

I'm trying things like $this->User->Server->find('all'); which just returns all the servers, regardless of whether they belong to the user.

$this->User->Server->find('all', array('conditions' => array('Server.user_id' => 1))) just gives an unknown column SQL error.

I'm sure I'm missing something obvious but just need someone to point me in the right direction.

Thanks!

2

2 Answers

1
votes

Your table names are right. There are many ways to do this:

Use the Containable behavior

In your AppModel, set the following:

 var $recursive = -1;
 var $actsAs = array('Containable');

Then, use the following code to query your servers:

$userWithServers = $this->User->find('all', array(
    'conditions' => array('User.id' => 1),
    'contain' => array('Server')
));

Note that we are querying the User model, instead of the Server model to accomplish this.

Use bindModel

$this->Server->bindModel(array('hasOne' => array('UsersServer')));
$this->Server->find('all', array(
    'fields' => array('Server.*'),
    'conditions' => array('Server.user_id' => 1)
));

I personally don't recommend using bindModel a lot. Eventually, your code becomes a bit unmanagable. You should try using the Containable behavior whenever possible. The code looks cleaner and simpler. More on the bindModel method can be found here.

HTH.

0
votes

I think you're supposed to name tour table user_servers.