Условия по соответствующей таблице в CakePHP 3 - PullRequest
0 голосов
/ 01 марта 2019

У меня проблемы с написанием этого кода правильно.У меня есть таблицы 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 не работает.Может кто-нибудь помочь мне это исправить?

1 Ответ

0 голосов
/ 02 марта 2019

Вы можете сделать это так.

->contain(["Tags" => function (Query $query, $quoi) {
return $query->select(['field_1', 'field_2'])
    ->where(['OR'  => ['Tags.nom LIKE ' => '%' . $quoi . '%', 'Tags.description LIKE' => '%' . $quoi . '%']]); }, "Categories" ])
...