Моя проблема связана с текущей платформой 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
лучший способ сделать то, что я хочу? Я очень открыт для предложений. Я искал несколько дней.
Пожалуйста помоги!
Задача ещё не решена.
Других решений пока нет …