Cakephp 找到结果但实体确实包含结果

问题描述 投票:0回答:0

我有一个名为“服务”的表,其中包含现场服务编号。 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 将结果连接到我原来的服务实体?

php mysql cakephp
© www.soinside.com 2019 - 2024. All rights reserved.