2017-01-20 12 views
1

Я не могу отобразить любые строки из атрибута, принадлежащего ToMany (у преподавателей есть предметы). Я использую тот же самый код в другой таблице, но по какой-то причине этот код дает ошибку, в которой говорится, что colum не существует, когда он это делает.Невозможно отобразить строки из fromToMany

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Subjects.subject_id' in 'on clause'

$tid = 12; 
$sub = $this->Subjects->find('list')->hydrate(true); 

$sub->matching('Tutors', function ($q) use ($tid) { 
    return $q->where(['Tutors.id' =>$tid]); 
}); 

Модель в наставники

$this->belongsToMany('Subjects', [ 
    'foreignKey' => 'tutor_id', 
    'targetForeignKey' => 'subject_id', 
    'joinTable' => 'tutors_subjects' 
]); 
+2

Попробуйте переименовать таблицу 'tutors_subjects' как' subject_tutors' [Присоединить таблицы, используемые в BelongsToMany отношения между моделями, должны быть названы после того, как таблицы моделей, к которым они присоединятся, будут расположены в алфавитном порядке (articles_tags, а не tags_articles)] (https : //book.cakephp.org/3.0/en/intro/conventions.html) –

+0

subject_tutors работает, так что это проблема. Невозможно было бы догадаться об этом, так как эта таблица была разбита по умолчанию. – jagguy

+0

Пожалуйста, сделайте свой пост ответом, это настоящий сложный вопрос, который вы решили – jagguy

ответ

3

Попробуйте переименовать таблицу tutors_subjects в subjects_tutors

Join tables, used in BelongsToMany relationships between models, should be named after the model tables they will join, arranged in alphabetical order (articles_tags rather than tags_articles)

Дополнительная информация Model and Database Conventions