Cakephp 3 модель найти не удается с анонимной функцией - PullRequest
0 голосов
/ 29 января 2019

Я получаю «Внутренняя ошибка сервера» по этому простому запросу:

$query = $this->find()
    ->contain(['CatLang' => function(Query $q) use($i18n){
      return $q->where(['CatLang.i18n' => $i18n]);
    }])
    ->where(['Categories.id' => $categoryId]);

$category = $query->first();

Таблицы выглядят так, упрощенно:

  categories
    id

  cat_lang
    category_id
    i18n

Модели называются CategoriesTable и CatLangTable, оба расширяют Table.

CatLangTable относится к категориям:

$this->belongsTo('Categories');

.. и Categories hasMany CatLangs:

$this->hasMany('CatLang');

Запрос запускается из функции в CategoriesTable.Рабочий запрос в mysql будет выглядеть следующим образом:

SELECT * FROM categories AS c 
INNER JOIN cat_lang as cl ON cl.category_id=c.id
WHERE c.id=13
AND cl.i18n='sv'

Этот запрос вернет набор результатов из одной строки в категориях с идентификатором 13, объединенный с одной строкой из cat_lang, где i18n равен 'sv'.(category_id и i18n имеют уникальный индекс.)

Может кто-нибудь подсказать, что я делаю не так?

Использование cakephp 3.5.17, php 7 и mysql 5.7.

1 Ответ

0 голосов
/ 30 января 2019

Мой плохой.Как отмечено в комментариях ndm, я полностью пропустил импорт пространства имен Query.

use Cake\ORM\Query;

Сообщение об ошибке было достаточно ясным, если бы я хотел прочитать его: :-)

App\Model\Table\CategoriesTable::App\Model\Table\{closure}() 
must be an instance of App\Model\Table\Query, 
instance of Cake\ORM\Query given

Надеюсь, это кому-нибудь поможет.

...