У меня проблема с Cakephp 3.3, в которой я не знаю, как получить доступ к связанным данным, используя предложение содержать в предложении where.Cakephp 3 Как получить доступ к глубокому содержанию ассоциаций в where clause?
Вот запрос:
$cables = TableRegistry::get('cable_schedule');
$cablemark = 'test1';
$equipement = 'test2';
$compartment = 'test3';
$system = 'test4';
$query = $cables->find('all')->contain(['CableType', 'Contract', 'EquipementSource' => ['Compartment', 'System'], 'EquipementDest' => ['Compartment', 'System']])
->where(['EquipementSource.Description like' => '%'.$equipement.'%'])
->orWhere(['EquipementDest.Description like' => '%'.$equipement.'%'])
->andWhere(['Cable_Mark like' => '%'.$cablemark.'%'])
->andWhere(['EquipementSource.Compartment.Description like' => '%'.$compartment.'%'])
->orWhere(['EquipementDest.Compartment.Description like' => '%'.$compartment.'%'])
->andWhere(['EquipementSource.System.Description like' => '%'.$system.'%'])
->orWhere(['EquipementDest.System.Description like' => '%'.$system.'%']);
$this->set('cables', $query);
Ошибка:
SQLSTATE [42S22]: Column не найдено: 1054 Неизвестный столбец 'EquipementDest.System.Description' в 'где предложение'
это зависит от отношений, которые Вы имеете между вашими моделями. Если все отношения принадлежат типу, то ваш запрос правильный. Но я думаю, что они hasMany или принадлежит ToMany. В этом случае вам нужно использовать условие соответствия() – arilia