UpdateAll и HABTM в CakePHP
-
22-07-2019 - |
Вопрос
У меня есть две модели и таблица соединений, User
, Post
и posts_users
.
А 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
Предупреждение (512):Ошибка SQL:1054:Неизвестный столбец «User.is_active» в разделе «where»…
Запрос:ОБНОВЛЯТЬ
posts_sites
КАКPostsUser
НАБОРPostsUser
.is_active
= 1 ГДЕPostsUser
.user_id
= 1 ИUser
.is_active
= 1
Как вы можете видеть, таблица User не объединяется в запросе.Есть ли решение этой проблемы?
Решение
Вы определили PostsUser
модели явно, или вы просто используете неявно сгенерированную модель?
Похоже, что дело в последнем, так что эта модель, вероятно, не вызовет никаких ассоциаций.Вы можете связать их на лету перед вызовом обновления или явно создать файл модели и определить ассоциации.
Т.е.тот Post
и User
модели связаны друг с другом, но PostsUser
model — это просто пустая вспомогательная модель, свисающая с любого из них.Сам по себе он не имеет никаких подключений, поэтому при звонке с PostsUser
у него нет определенных ассоциаций.
Post <---> User
| |
v v
PostsUser PostsUser