【问题标题】:Find by conditions on associated model in CakePHP 3在 CakePHP 3 中按条件查找关联模型
【发布时间】:2016-09-18 13:24:07
【问题描述】:

我有两张桌子orderssub_orders。 他们的关联是

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

两个表在orderssub_orders 中分别有invoice_nosub_invoice 列。

我必须从包含关联sub_ordersorders 表中查找记录,其中$trackingId 将匹配Orders.invoice_noSubOrders.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'

【问题讨论】:

  • 为 SubOrders 模型添加条件。
  • $trackingId 将匹配来自Orders 或来自SubOrders。不能使用and,因为两者的条件都不会满足

标签: cakephp model-associations cakephp-3.2


【解决方案1】:

尝试这样查询:

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

        ->where(['SubOrders.sub_invoice' => $trackingId]);
}
]);

【讨论】:

  • 获取未定义变量“$trackingId”,用于行“where(['SubOrders.sub_invoice' => $trackingId]);”
  • bikash.bitz - 这是因为这个例子使用了他们已经设置的变量。
  • 我尝试了您的解决方案,在第 2 行(条件条件下)定义了 $trackingId,但在第 5 行出现错误 $trackingId 未定义。
  • 将其从 function ($q) 更改为 function ($q) use ($trackingId)
  • 如何为其他关联实现相同的效果。让我们考虑一下我有一个与订单相关联的模型包。我想在所有 3 个表中搜索 $trackingId 的现有值(所有 3 个模型的条件都在 OR 中)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-30
  • 2013-12-02
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多