Cakephp 3 Как добавить предложение ИЛИ ГДЕ между несколькими совпадениями? (глубокие ассоциации)

Моя проблема связана с текущей платформой Cakephp 3.3, в которой я пытаюсь искать между двумя Compartment, но у каждого из них свое оборудование.

каждый Cable есть 2 Equipement и каждый Equipement есть 1 Compartment, Если я хочу искать между 2 Compartement с предложением ИЛИ, как мне продолжить?

Вот мой код:

$cables = TableRegistry::get('cable_schedule');

if (isset($this->request->query['search'])){

$data = $this->request->query;

$query = $cables->find('all')->contain(['CableType', 'EquipementSource.Compartment', 'EquipementSource.System', 'EquipementDest.Compartment', 'EquipementDest.System'])
->where(['Cable_Mark like' => '%'.$data['cable_mark'].'%',
'OR' => [
['EquipementSource.Description like' => '%'.$data['equipement'].'%'],
['EquipementDest.Description like' => '%'.$data['equipement'].'%']
]])
->matching('EquipementSource.Compartment', function($q) use ($data){
return $q->where(['Compartment.Description like' => '%'.$data['compartment'].'%'])->orWhere(['Compartment.Navis_ID like' => '%'.$data['compartment'].'%']);
})
->matching('EquipementDest.Compartment2', function($q) use ($data){
return $q->where(['Compartment2.Description like' => '%'.$data['compartment'].'%'])->orWhere(['Compartment2.Navis_ID like' => '%'.$data['compartment'].'%']);
})
->matching('EquipementSource.System', function($q) use ($data){
return $q->where(['System.Description like' => '%'.$data['system'].'%']);
});
}

Структура базы данных все в belongsTo,

Обратите внимание, что я добавил Compartment2, которые указывают на ту же таблицу, что и Compartmentпотому что если я добавлю Compartement дважды для двух разных совпадений, псевдоним одинаков, поэтому он ищет только первый (EquipementSource.Compartment).

На данный момент этот запрос ищет как Compartment в предложении AND, но я хочу предложение OR.

Является matching лучший способ сделать то, что я хочу? Я очень открыт для предложений. Я искал несколько дней.

Пожалуйста помоги!

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector