我们有4张桌子
用户
-id
个人资料
-id
-user_id
问题
-id
选项
-id
个人资料问题
-id
-profile_id
-question_id
-option_id
现在我需要获取所有个人资料,每个个人资料都有多个问题,每个问题都有很多选择。
用户模型
$this->hasMany('Profiles', [
'foreignKey' => 'user_id'
]);
个人资料模型
$this->belongsToMany('Questions', [
'foreignKey' => 'profile_id',
'targetForeignKey' => 'question_id',
'joinTable' => 'profile_questions',
'through' => 'ProfileQuestions' ,
'joinType' => 'LEFT']);
问题模型
$this->belongsToMany('Options', [
'foreignKey' => ['question_id'],
'targetForeignKey' => 'option_id',
'joinTable' => 'profile_questions',
'through' => 'ProfileQuestions'
]);
ProfileQuestions模型
$this->belongsTo('Profile', [
'foreignKey' => 'profile_id',
]);
$this->belongsTo('Questions', [
'foreignKey' => 'question_id'
]);
$this->belongsTo('Options', [
'foreignKey' => 'option_id'
]);
获取结果的控制器代码
$query = $this->Users->find('first')
$query->contain(['Profiles.Questions.Options']);
错误
Fatal error: Out of memory (allocated 408944640) (tried to allocate 665912212 bytes) in vendor\cakephp\cakephp\src\Database\Statement\MysqlStatement.php on line 39
问题与协会有关。如果我们在其中包含选项的条件中设置profile_id,则它适用于该配置文件ID。