Это довольно стандартная вещь, которую я сделал, вероятно, 600 раз в CakePHP 2, но на всю жизнь я не могу ее получить для работы в CakePHP 3.«Через» связь с полями «foreign_key» и «model» в CakePHP 3
У меня есть Videos
, Photos
, Articles
. У меня также есть Categories
.
Все видео, фото и статьи могут принадлежать одной или нескольким категориям.
Целью текущей проблемы является вытягивание видеороликов под определенной категорией.
Итак, я попытался это:
// VideosTable
$this->belongsToMany('Categories', [
'joinTable' => 'categorized',
'className' => 'Categorized',
'foreignKey' => 'foreign_key',
'conditions' => [
'Categorized.model' => 'Videos',
]
]);
public function getTopVideosByCategory($categorySlug)
{
return $this->Categories->find('all')
->where(['Categories.slug' => $categorySlug])
->contain([
'Videos' => function ($q) {
return $q
->limit(8)
->contain([
'Tags',
'Categories' // tried with and without this
])
->order([
'Videos.featured' => 'DESC',
'Videos.created' => 'DESC'
]);
}
])
->first();
}
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Categorized.model' in 'where clause'
Я пытался несколько других способов, включая создание модели в объединения таблиц, и несколько других, но продолжают получать ошибки. Я пробовал с каждым вариантом и с ограниченным количеством вариантов. Я пробовал использовать фактический класс Table, и я попробовал псевдо-одно (например, «Категоризировано» выше).
Я должен предположить, что это довольно стандартный, но не может найти пример в книге, и я просто не могу заставить его работать.
Edit:
Я также попытался это:
//VideosTable
public function initialize(array $config)
{
$this->belongsToMany('Categories', [
'through' => 'Categorized',
'conditions' => [
'Categorized.model' => $this->alias(),
]
]);
}
public function getTopVideosByCategory($categorySlug)
{
return $this->find('all')
->matching('Categories', function ($q) use ($categorySlug) {
return $q
->where(['Categories.slug' => $categorySlug]);
})
->contain([
'Tags',
'Categories'
])
->limit(8)
->order([
'Videos.featured' => 'DESC',
'Videos.created' => 'DESC'
])
->first();
}
Но получить эту ошибку:
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Categorized.model' in 'on clause'
Как выглядит схема таблицы для категории? –
Категорируется только 'id' (CHAR 36),' foreign_key' (CHAR 36), 'model' (VARCHAR 60),' category_id' (CHAR 36) – Dave