Cakephp3:如何在带有包含条件的分页中搜索数据



我有两个表的名称是杂项和用户。杂项表中有driver_id和vendor_id。名称id列为的用户表中的两个id。这是我的示例代码。

src/Model/Table/Miscellaneous.php

<?php
namespace AppModelTable;
use CakeORMTable;
use CakeValidationValidator;
class MiscellaneousTable extends Table {
public function initialize(array $config) {
$this->table('miscellaneous');
$this->displayField('name');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
$this->belongsTo('Vendors', [
'foreignKey' => 'vendor_id',
'className' => 'users',
'joinType' => 'left'
]);
$this->belongsTo('Drivers', [
'foreignKey' => 'driver_id',
'className' => 'users',
'joinType' => 'left'
]);
}
}

我要在供应商名称和驱动程序名称中进行搜索。以下是我的繁殖条件:

if (!empty($this->request->data['vendor']['name'])) {
$vendor_name = $this->request->data['vendor']['name'];
}
if (!empty($this->request->data['driver']['name'])) {
$driver_name = $this->request->data['driver']['name'];
}
$miscellaneous = $this->paginate($this->Miscellaneous, ['contain' => ['Drivers' => function(CakeORMQuery $q) {
return $q->where(['Drivers.name LIKE ' => '%'.$driver_name.'%']);
}, 'Vendors' => function(CakeORMQuery $q) {
return $q->where(['Vendors.name LIKE ' => '%'.$vendor_name.'%']);
}], 'conditions' => $con, 'order' => ['Miscellaneous.id' => 'DESC']]);

但它什么也没显示。请帮我找到正确的解决方案。它在没有供应商和驱动程序名称的条件下工作。

对于belongTo关联(Cake可以用普通Joins处理(,我经常使用以下代码片段:

<?PHP
$whereArray = [];
if (!empty($this->request->data['vendor']['name'])) {
$whereArray[] = ['Vendors.name LIKE ' => '%'.$this->request->data['vendor']['name'].'%'];
}
if (!empty($this->request->data['driver']['name'])) {
$whereArray[] = ['Drivers.name LIKE ' => '%'.$this->request->data['driver']['name'].'%'];
}
$miscellaneous = $this->paginate($this->Miscellaneous->find('all', ['contain' => ['Vendors', 'Drivers']])->where($whereArray)->order(['Miscellaneous.id' => 'DESC']);
?>

注释:我经常使用"all"作为查找器,因为我也需要列表中的完整记录。。。

最新更新