如何在CakePHP 3.x中编写自定义查询以从联合表中检索数据

时间:2016-10-25 03:45:25

标签: sql cakephp-3.0

有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中编写自定义查询,请告诉我

1 个答案:

答案 0 :(得分:1)

如果您遵循蛋糕的约定,这很简单。 只是尝试在分页数据中包含用户:

$this->paginate = [
        'contain' => ['Users']
    ];
$interestLog = $this->paginate($this->interestLog);

$this->set(compact('interestLog'));
$this->set('_serialize', ['interestLog']);