Найти по условиям связанной модели в CakePHP 3

У меня две таблицы orders а также sub_orders, Их ассоциация

$orders->hasMany('SubOrders', [
   'foreignKey' => 'order_id'
]);

Обе таблицы имеют invoice_no а также sub_invoice столбцы в orders а также sub_orders соответственно.

Я должен найти записи из orders таблица, содержащая связанные sub_orders где $trackingId будет соответствовать либо Orders.invoice_no или же SubOrders.sub_invoice

$findOrder = $this->Orders->find('all', [
    'conditions' => [
      'OR' => [
         'Orders.invoice_no' => $trackingId,
         'SubOrders.sub_invoice' => $trackingId
       ]
     ],
     'contain' => [
        'SubOrders'
     ]
  ]);

Но это дает ошибку

Column not found: 1054 Unknown column 'SubOrders.sub_invoice' in 'where clause'

1 ответ

Решение

Попробуйте выполнить запрос следующим образом:

$findOrder = $this->Orders->find()
->where(['Orders.invoice_no' => $trackingId])
->contain(['SubOrders' => function ($q) use ($trackingId) {
   return $q

        ->where(['SubOrders.sub_invoice' => $trackingId]);
}
]);
Другие вопросы по тегам