cakephp принадлежит ToMany с 4 столами
У нас 4 стола
пользователей
-Я бы
профили
-Я бы
-Идентификатор пользователя
Вопросы
-Я бы
Опции
-Я бы
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, где содержится условие с опциями, то это будет работать для этого идентификатора профиля.