有2个表 1:用户
Id | Name |
1 user1
2 user2
3 user3
2:InterestLog
id | user_id | user_id_Interested_in |
1 1 2
2 1 3
3 2 1
4 2 3
5 3 1
6 3 2
现在在cakephp中,检索数据和分页的查询是
$interestLog = $this->paginate($this->interestLog);
$this->set(compact('interestLog'));
$this->set('_serialize', ['interestLog']);
上面查询产生的结果是visitLog表的精确映射。我需要显示名称而不是Id
我正在努力提供以下结果。
Id | USER | User Interested In |
1 user1 user2
2 user1 user3
3 user2 user1
4 user2 user3
5 user3 user1
6 user3 user2
但我不知道如何编写自定义查询来生成此结果。能否请你给我一些提示如何做到这一点。 我想到了以下SQL查询,它运行得很完美,但如何将其转换为cakephp查询
SELECT il.Id,s.Name , interest.Name FROM users s , users interest , interest_log il
WHERE s.Id = il.user_id && il.user_id_interested = interest.Id
在CAKEPHP 3.x中,我通过以下方式实现了预期的结果
use Cake\Datasource\ConnectionManager;
$conn = ConnectionManager::get('default');
$result = $conn->execute("SELECT il.Id,s.Name , visited.Name
FROM users s , users visited , interest_log il
WHERE
s.Id = il.user_id
&&
il.user_id_interested = visited.Id"
);
但是,如果有更好的方法在CAKEPHP 3.x中编写自定义查询,请告诉我
答案 0 :(得分:1)
如果您遵循蛋糕的约定,这很简单。 只是尝试在分页数据中包含用户:
$this->paginate = [
'contain' => ['Users']
];
$interestLog = $this->paginate($this->interestLog);
$this->set(compact('interestLog'));
$this->set('_serialize', ['interestLog']);