Cakephp 3 模型查找失败,包含匿名函数

Cakephp 3 model find fails with contain anonymous function

我在这个简单的查询中得到 "An Internal Server Error Occurred":

$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');

..和类别有许多 CatLangs:

$this->hasMany('CatLang');

查询 运行 来自类别 Table 中的一个函数。 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'

此查询将 return 来自类别 ID 13 的一行的结果集,与来自 cat_lang 的一行相结合,其中 i18n 等于 'sv'。 (category_id 和 i18n 有唯一索引。)

谁能告诉我,我做错了什么?

使用蛋糕php 3.5.17,php 7,和mysql 5.7。

我的错。正如 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

希望对大家有所帮助。