【发布时间】:2016-07-06 07:26:29
【问题描述】:
我有两张桌子services 和service_requests。 service_requests 表有外键 service_id 引用 services 表。
我必须从services 和service_requests 中选择数据,其中services.id = service_requests.service_id ORDER BY COUNT(service_requests.service_id) DESC
这就是我在控制器中所做的事情
$servicesTable = TableRegistry::get('services');
$featuredServices = $servicesTable->find('all')
->select(['ServiceRequests.service_id', 'count' => 'COUNT(ServiceRequests.service_id)'])
->select($servicesTable)
->join([
'table' => 'service_requests',
'alias' => 'ServiceRequests',
'conditions' => ['Services.id' => 'ServiceRequests.service_id'],
])
->group('service_id')
->order(['Count' => 'DESC'])
->limit(10);
$this->set('featuredServices', $featuredServices);
并在视图中打印
if (!empty($featuredServices)):
foreach($featuredServices as $service):
echo $service->title;
endforeach;
endif;
但它不起作用。同样打印echo $featuredServices; 只打印sql 字符串SELECT.......。这两个表都没有与我正在使用的控制器相关联。
编辑 2
我想要这样的查询
SELECT ServiceRequests.service_id AS `ServiceRequests__service_id`, COUNT(ServiceRequests.service_id) AS `count`, Services.id AS `Services__id`, Services.service_category_id AS `Services__service_category_id`, Services.title AS `Services__title`, Services.description AS `Services__description` FROM services Services INNER JOIN service_requests ServiceRequests ON Services.id = ServiceRequests.service_id GROUP BY service_id ORDER BY Count DESC LIMIT 10
这个sql查询在phpMyAdmin运行时工作正常,这个查询是由debug($featuredServices)生成的
$featuredServices = $servicesTable->find('all')
->select(['ServiceRequests.service_id', 'count' => 'COUNT(ServiceRequests.service_id)'])
->select($servicesTable)
->join([
'table' => 'service_requests',
'alias' => 'ServiceRequests',
'conditions' => ['Services.id' => 'ServiceRequests.service_id'],
])
->group('service_id')
->order(['Count' => 'DESC'])
->limit(10);
这只是在调试时生成 sql 查询。如何执行此操作,以便获得结果而不是 sql 查询。
【问题讨论】:
标签: php mysql cakephp cakephp-3.2