cakephp принадлежит ToMany с 4 столами

У нас 4 стола

  1. пользователей

    -Я бы

  2. профили

    -Я бы

    -Идентификатор пользователя

  3. Вопросы

    -Я бы

  4. Опции

    -Я бы

  5. ProfileQuestions

    -Я бы

    -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, где содержится условие с опциями, то это будет работать для этого идентификатора профиля.

0 ответов

Другие вопросы по тегам