CakePHP:显示来自多个模型的数据

CakePHP:显示来自多个模型的数据,cakephp,multiple-tables,cakephp-2.x,cakephp-2.7,Cakephp,Multiple Tables,Cakephp 2.x,Cakephp 2.7,我正在CakePHP2.7.8上开发一个服务请求应用程序。 我必须在用户区域显示提供所需服务的客户列表 为此,我在数据库中有一个service\u requests表来跟踪用户的请求 CREATE TABLE `service_requests` ( `id` char(36) NOT NULL, `customer_id` char(36) DEFAULT NULL, `customer_address_id` char(36) DEFAULT NULL, `service_i

我正在CakePHP2.7.8上开发一个服务请求应用程序。 我必须在用户区域显示提供所需服务的客户列表

为此,我在数据库中有一个
service\u requests
表来跟踪用户的请求

CREATE TABLE `service_requests` (
  `id` char(36) NOT NULL,
  `customer_id` char(36) DEFAULT NULL,
  `customer_address_id` char(36) DEFAULT NULL,
  `service_id` char(36) DEFAULT NULL,
  `service_area_id` char(36) DEFAULT NULL,
  `status_code` int(11) DEFAULT NULL,
  `status` varchar(30) DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
)
注意这里的
service\u id
service\u area\u id
分别是两种不同型号
services
service\u area
的外键

services.sql

CREATE TABLE `services` (
  `id` char(36) NOT NULL,
  `title` varchar(45) DEFAULT NULL,
  `description` text,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
)
CREATE TABLE `service_areas` (
  `id` char(36) NOT NULL,
  `postal_id` char(36) DEFAULT NULL,
  `area_name` varchar(45) DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `postal_id_idx` (`postal_id`)
)
服务区域。sql

CREATE TABLE `services` (
  `id` char(36) NOT NULL,
  `title` varchar(45) DEFAULT NULL,
  `description` text,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
)
CREATE TABLE `service_areas` (
  `id` char(36) NOT NULL,
  `postal_id` char(36) DEFAULT NULL,
  `area_name` varchar(45) DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `postal_id_idx` (`postal_id`)
)
我有另一个表来维护客户(服务提供商)提供的服务列表

以及另一个表格,用于维护服务提供商所涵盖的服务领域列表

CREATE TABLE `client_services` (
  `id` char(36) NOT NULL COMMENT '      ',
  `client_id` char(36) DEFAULT NULL,
  `service_id` char(36) DEFAULT NULL,
  `charge` float DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `client_id_idx` (`client_id`),
  KEY `service_id_idx` (`service_id`)
)
CREATE TABLE `client_service_areas` (
  `id` char(36) NOT NULL,
  `client_id` char(36) DEFAULT NULL,
  `service_area_id` char(36) DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `client_id_idx` (`client_id`),
  KEY `service_area_id_idx` (`service_area_id`)
) 

serviceRequest模型:serviceRequest.php

class ServiceRequest extends AppModel {

    public $displayField = 'status';

/**
 * belongsTo associations
 *
 * @var array
 */
    public $belongsTo = array(
        'Customer' => array(
            'className' => 'Customer',
            'foreignKey' => 'customer_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'CustomerAddress' => array(
            'className' => 'CustomerAddress',
            'foreignKey' => 'customer_address_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'Service' => array(
            'className' => 'Service',
            'foreignKey' => 'service_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'ServiceArea' => array(
            'className' => 'ServiceArea',
            'foreignKey' => 'service_area_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );
}
请求
查看
操作时,访问:

http://localhost/service_requests/view/<service_request_id>
http://localhost/service_requests/view/
它显示服务请求的结果

现在,我要做的是在该视图下方显示一个列表,其中包含在请求的服务区域中提供请求的服务的客户的名称(可能有许多服务提供商在同一服务区域中提供相同的服务)

这意味着在
Ghaziabad


客户的名称和其他详细信息从
客户
表中获取。

我认为您需要修改此代码。
$query=$articles->find('all'))
->其中(['Articles.created>'=>新日期时间('-10天'))
->包含(['Comments','Authors'])
->限额(10)


您可以研究这个

这是您的数据模型:

您可以通过将
客户机
客户机服务
客户机服务区
,按
服务id
服务区id
进行过滤,并按
客户机.id
进行分组来检索所需信息

以下方面应起作用:

public function view($id){

    // retrieve ServiceRequest data 
    $serviceRequest = $this->ServiceRequest->findById($id);

    // retrieve Client data        
    $options['joins'] = array(
        array('table' => 'client_services',
            'alias' => 'ClientService',
            'type' => 'INNER',
            'conditions' => array(
                'Client.id = ClientService.client_id',
            )
        ),
        array('table' => 'client_service_areas',
            'alias' => 'ClientServiceArea',
            'type' => 'INNER',
            'conditions' => array(
                'Client.id = ClientServiceArea.client_id',
            )
        ),

    );

    $options['conditions'] = array(
        'ClientService.service_id'=>$serviceRequest['ServiceRequest']['service_id'],
        'ClientServiceArea.service_area_id'=>$serviceRequest['ServiceRequest']['service_area_id']
    );

    $options['group'] = array('Client.id');

    $Client = ClassRegistry::init('Client');
    $clients = $Client->find('all', $options);
    $this->set(compact('serviceRequest','clients'));
}

注意:上面的代码未经测试,缺少错误处理

请展示您迄今为止的尝试。我是CakePHP新手,这是我在完成博客教程后的第一个项目,因此,我想从何处开始寻找想法。因此,可能stackoverflow不是寻求帮助的合适地方,请查看关于什么被认为是离题的。另外:如果这是你的第一个蛋糕项目,为什么不从cakephp 3开始而不是cakephp 2呢?我正在开发Netbeans IDE,cakephp 3.0
+50
没有官方支持的插件@inigo flores向你颁发了赏金。当之无愧