У меня проблема с целостностью данных при использовании find() в моем контроллере в сочетании с beforeFind() в обратном вызове поведения. WHERE Submissions.site_id не добавляется в предложение WHERE, как должно быть. Я получаю разные наборы результатов в зависимости от того, где установлено предложение WHERE.
в моем SubmissionsController:
public function index()
{
$query = $this->Submissions->find('all')
->where(['user_id' => $this->Auth->user('id')])
->contain(['Users', 'Categories']);
$this->set('submissions', $this->paginate($query));
}
В моем обратном вызове модели beforeFind() (прикрепленном как «TenantBehavior» к
$query->where([$this->_table->alias().'.'.'site_id' => 3]);
Проблема заключается в том, что с учетом вышеизложенного сгенерированный SQL помещает предложение «WHERE» как AND в условие JOIN, подобное этому, а НЕ в фактическое WHERE:
...
FROM
submissions Submissions
INNER JOIN users Users ON (
Users.id = (Submissions.user_id)
AND Users.site_id = 3
)
INNER JOIN categories Categories ON (
Categories.id = (Submissions.category_id)
AND Categories.site_id = 3
)
WHERE
user_id = 315
Если я удалю beforeFind() ->where и вместо этого размещу его на контроллере ->where, я получу ожидаемый SQL и набор результатов следующим образом:
...
FROM
submissions Submissions
INNER JOIN users Users ON (
Users.id = (Submissions.user_id)
AND Users.site_id = 3
)
INNER JOIN categories Categories ON (
Categories.id = (Submissions.category_id)
AND Categories.site_id = 3
)
WHERE
(
user_id = 315
AND Submissions.site_id = 3
)
Мысли? Предложения?
РЕДАКТИРОВАТЬ По предложению @ndm я начал обновлять и предоставлять гораздо больше контекста. При этом я обнаружил (как идиот), что мне не хватает $this->addBehavior('Tenant');
в моей модели «SubmissionsTable». Добавление этого, конечно, решило проблему.