【发布时间】:2016-09-28 03:33:45
【问题描述】:
我的要求是搜索 2 个不同的表格:Vets 和 Clinics。它们之间可能存在关系,即结果应获取名称中包含“a”的诊所和名称中包含“a”的兽医。兽医可能与诊所有关,也可能与诊所无关。目前我正在做以下事情。有什么方法可以避免运行 2 个查询,也可以帮助我使用 cakephp 分页助手?
$this->paginate = array(
'Vet' => array(
'conditions' => $conditions,
'fields' => array('Vet.id', 'Vet.name', 'Vet.professionnal_address', 'phone_number', 'Vet.email', 'Vet.type', 'Vet.latitude', 'Vet.longitude','Vet.city','Vet.clinic_id','Vet.zipcode'),
'joins' => array(
array(
'table' => 'vet_appointment_types',
'alias' => 'VetAppointmentType',
'type' => 'LEFT',
'conditions' => array(
'Vet.id = VetAppointmentType.vet_id',
)
)
),
'limit' => $limit,
'group' => array(
'Vet.id'
),
'order' => array(
'Vet.name' => 'ASC'
)
),
'Clinic' => array(
'conditions' => $conditions1,
'fields' => array('Clinic.*'),
'limit' => $limit,
'order' => array(
'Clinic.name' => 'ASC'
)
)
);
$results = $this->paginate('Vet');
$results2 = $this->paginate('Clinic');
我尝试在非数据库模型中扩展默认分页组件并使用联合,但数据库结构有点复杂,因此无法使用联合。另外,我认为实现基于临时表的模型是一种选择,但由于它将用于搜索,所以究竟如何实现它,我无法思考。任何帮助都会 +1 ;)
【问题讨论】:
-
如果您不能使用联合或视图,您将很难对来自两个表的非关联数据进行分页。为此,我将使用 Elastic Search 实现搜索索引。
-
如果我使用临时表来存储tabled和search中的数据,这会是一个乏味的方法吗?
-
它会,当任何数据发生变化时,您必须更改临时表。也许您应该查看数据库视图?
-
谢谢。我是使用数据库视图完成的。
标签: php mysql cakephp view pagination