在CakePHP 3.x中获取关联数据

时间:2017-04-19 14:58:42

标签: mysql cakephp cakephp-3.0

我在Table类中有这个设置

Icases表

$this->table('icases');
$this->displayField('name');
$this->primaryKey('id');

$this->belongsTo('Clients', [
    'foreignKey' => 'client_id'
]);
$this->hasMany('Documents', [
    'foreignKey' => 'icase_id'
]);
$this->belongsToMany('Users', [
    'foreignKey' => 'icase_id',
    'targetForeignKey' => 'user_id',
    'joinTable' => 'icases_users'
    ]);

客户表

$this->table('clients');
$this->displayField('name');
$this->primaryKey('id');

$this->hasMany('Icases', [
    'foreignKey' => 'client_id'
]);
$this->belongsToMany('Users', [
    'foreignKey' => 'client_id',
    'targetForeignKey' => 'user_id',
    'joinTable' => 'clients_users'
    ]);

IcasesUsers表

$this->table('icases_users');
$this->displayField('icase_id');
$this->primaryKey(['icase_id', 'user_id']);

$this->belongsTo('Icases', [
    'foreignKey' => 'icase_id',
    'joinType' => 'INNER'
]);
$this->belongsTo('Users', [
    'foreignKey' => 'user_id',
    'joinType' => 'INNER'
    ]);

在Icases表中,我有这个SQL,它检索相关客户端和登录用户的活动和待处理案例数据。这很好用,直到用户设置过滤器包括存档的情况以及活动和待处理,返回107077行我收到了内存错误。 无论如何使用contains()编写这个sql并在将数据提供给用户之前以块的形式获取数据,以便它超过内存限制?

$cases_data = TableRegistry::get('icases')->find('all')
                ->select(['icases.id', 'icases.state', 'icases.client_id', 'icases.name', 'icases.age', 'clients.name'])
                ->innerJoin('icases_users', 'icases_users.icase_id = icases.id')
                ->where($conditions)
                ->innerJoin('clients', 'clients.id = icases.client_id')
                ->group(['icases.id'])
                ->order(['clients.name' => 'ASC', 'icases.name' => 'ASC'])
                ->execute()
                ->fetchAll('assoc');

1 个答案:

答案 0 :(得分:0)

您可以对结果进行分页。

请参阅Paginator HelperPagination Component文档。