我有一个名为“服务”的表,其中包含现场服务编号。 Servicenumber 可以出现在多行中,我想找到与 共享相同 servicenumber 的服务
$service = $this->Services->findByServiceGroupId(198)->contain(['RelatedServices'])->first();
我在 ServicesTable 中的关系是
$this->hasMany('RelatedServices', [
'foreignKey' => 'servicenumber',
'bindingKey' => ['Services.servicenumber', 'Services.id', 'Services.service_group_id'],
'className' => 'Services',
'strategy' => 'subquery',
'finder' => 'related',
'conditions' => [
'Services.service_group_id != RelatedServices.service_group_id'
]
]);
取景器:
public function findRelated(Query $query, array $options = []): Query
{
$query = $query->select(['service_id' => 'Services.id', 'id' => 'RelatedServices.id'], false)->enableAutoFields(true);
return $query;
}
这会产生以下 SQL
SELECT
Services.id AS service_id,
RelatedServices.id AS id,
RelatedServices.id AS RelatedServices__id,
RelatedServices.prefix AS RelatedServices__prefix,
RelatedServices.suffix AS RelatedServices__suffix,
RelatedServices.count AS RelatedServices__count,
RelatedServices.service_group_id AS RelatedServices__service_group_id,
RelatedServices.customer_id AS RelatedServices__customer_id,
RelatedServices.name AS RelatedServices__name,
RelatedServices.status AS RelatedServices__status,
RelatedServices.servicenumber AS RelatedServices__servicenumber
FROM
services RelatedServices
INNER JOIN (
SELECT
(Services.servicenumber),
(Services.id),
(Services.service_group_id)
FROM
services Services
INNER JOIN customers Customers ON Customers.id = Services.customer_id
INNER JOIN service_groups ServiceGroups ON ServiceGroups.id = Services.service_group_id
WHERE
(
Services.service_group_id = 198
AND Services.status = 'active'
)
GROUP BY
Services.servicenumber,
Services.id,
Services.service_group_id
) Services ON RelatedServices.servicenumber = Services.servicenumber
WHERE
Services.service_group_id != RelatedServices.service_group_id
这个查询找到了正确的结果,但我的服务实体仍然有一个空的 related_services 数组。
我怎样才能让 cakephp 将结果连接到我原来的服务实体?