cakephp属于ToMany,有4个表

时间:2018-08-03 10:24:57

标签: cakephp query-builder model-associations cakephp-3.x

我们有4张桌子

  1. 用户

    -id

  2. 个人资料

    -id

    -user_id

  3. 问题

    -id

  4. 选项

    -id

  5. 个人资料问题

    -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。

0 个答案:

没有答案