У меня проблемы с написанием этого кода правильно.У меня есть таблицы companies
, categories
, companies_tags
и tags
.Отношения следующие (запекаются автоматически):
// CompaniesTable.php
$this->belongsToMany('Tags', [
'foreignKey' => 'company_id',
'targetForeignKey' => 'tag_id',
'joinTable' => 'companies_tags'
]);
$this->belongsTo('Categories', [
'foreignKey' => 'categorie_id'
]);
// CategoriesTable.php
$this->hasMany('Etablissements', [
'foreignKey' => 'categorie_id'
]);
// TagsTable.php
$this->belongsToMany('Companies', [
'foreignKey' => 'tag_id',
'targetForeignKey' => 'company_id',
'joinTable' => 'companies_tags'
]);
// CompaniesTags.php
$this->belongsTo('Companies', [
'foreignKey' => 'company_id',
'joinType' => 'INNER'
]);
$this->belongsTo('Tags', [
'foreignKey' => 'tag_id',
'joinType' => 'INNER'
]);
Мне нужно выбрать компании, название которых, название категории или одно из названий тегов которых содержат определенный текст.
$ets = (new TableRegistry())
->get('Companies')
->find('published')
->distinct()
->contain([
"Tags",
"Categories"
])
->leftJoinWith('Tags', function (\Cake\ORM\Query $q) use ($quoi) {
return $q->where(['OR' => ['Tags.nom LIKE ' => '%' . $quoi . '%', 'Tags.description LIKE' => '%' . $quoi . '%']]);
})
->where(['OR' => ["Companies.nom LIKE" => "%" . $quoi . "%",
"Companies.description LIKE" => "%" . $quoi . "%",
"Categories.description LIKE" => "%" . $quoi . "%",
"Categories.nom LIKE" => "%" . $quoi . "%",
]
]);
Этот запрос - то, что я могу себе представить, но, похоже, мой LEFT JOIN на tags
не работает.Может кто-нибудь помочь мне это исправить?