我在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');