2009-08-05 2 views
2

У меня есть две модели и таблица соединений, User, Post и posts_users.UpdateAll и HABTM в CakePHP

В таблице posts_users содержится несколько дополнительных полей, в том числе is_active. Я хочу, чтобы все сообщения пользователей активно, при условии, что пользователь активен.

У меня есть следующий

$this->Post->PostsUser->updateAll(array('PostsUser.is_active' => 1), array('PostsUser.user_id' => $data['User']['id'], 'User.is_active' => 1)); 

Что вызывает ошибку MySQL

Warning (512): SQL Error: 1054: Unknown column 'User.is_active' in 'where clause' ...

Query: UPDATE posts_sites AS PostsUser SET PostsUser . is_active = 1 WHERE PostsUser . user_id = 1 AND User . is_active = 1

Как вы можете видеть таблицу Пользователь не получает включилась в запросе. Есть ли проблемы вокруг этой проблемы?

ответ

2

Вы явно указали модель PostsUser или используете только неявно автогенерированную модель?

Похоже, что последнее имеет место, поэтому модель, вероятно, не будет иметь никаких ассоциаций. Вы можете связать их на лету, прежде чем совершать вызов обновления, или вы можете явно создать файл модели и определить ассоциации.

I.e. модели Post и User связаны друг с другом, но модель PostsUser представляет собой просто пустую вспомогательную модель, которая свисает с любого из них. Он сам по себе не имеет никаких соединений, поэтому при совершении вызова от PostsUser он не имеет определенных ассоциаций.

Post <---> User 
    |    | 
    v    v 
PostsUser  PostsUser 
+0

Это была автогенерированная модель, я создал файл модели с соответствующими ассоциациями, и теперь он работает, хорошая работа! – DanCake