Ассоциация модели Cakephp

Я пытаюсь выяснить, какой тип отношений я должен использовать, чтобы связать следующее:

У нас есть класс, в котором есть учитель и ученики.

Студенты и учитель принадлежат классу. Но как насчет наоборот?

Могу ли я использовать следующее в модели Classroom:

var $hasMany = array('Students');

var $hasOne = array('Teacher');

Спасибо.


person AlexBrand    schedule 29.07.2011    source источник
comment
это зависит от того, какие ограничения операций вы хотите иметь для этих моделей. В реальной жизни у ученика может быть много учителей; но если у учащегося может быть только 1 учитель в вашем приложении, тогда отношения hasOne являются правильными.   -  person Anh Pham    schedule 30.07.2011
comment
ну, в моем случае класс — это скорее административная вещь, где я могу получить доступ к классу и видеть его учеников и учителя. В классе может быть несколько учеников и один учитель. Ученик может принадлежать только к одному классу. Учитель отвечает за класс и должен иметь возможность составить список учеников в классе.   -  person AlexBrand    schedule 30.07.2011


Ответы (2)


Зависит от того, как вы хотите получить и/или смоделировать данные.

Предполагая, что у вашего Classrooms будет только одно Teacher, или у Teachers будет только одно Classroom, вы даже можете сделать Classroom полем Teacher.

Но мы предполагаем, что вы хотите, чтобы все это было абстрагировано друг от друга. В этом случае ваши модели будут выглядеть примерно так:

// classroom.php
class Classroom extends AppModel {
    var $hasMany = array( 'Student' );
    var $hasAndBelongsToMany = array( 'Teacher' );
}

// teacher.php
class Teacher extends AppModel {
    var $hasMany = array( 'Student' );
    var $hasAndBelongsToMany = array( 'Classroom' );
}

// student.php
class Student extends AppModel {
    var $belongsTo = array( 'Teacher', 'Classroom' );
}
person dclowd9901    schedule 29.07.2011
comment
Не могли бы вы немного объяснить $hasAndBelongsTo в модели учителя. В чем разница с $belongsTo ?? Спасибо! - person AlexBrand; 30.07.2011
comment
Когда вы думаете об этих отношениях, помните, что они существуют для того, чтобы обеспечить простое соединение моделей. $hasAndBelongsToMany позволяет использовать перекрестное соединение и соединение более сложными способами. Допустим, у вас есть блог с пользователями, которые публикуют сообщения, и пользователями, которые отвечают в комментариях. Пользователь может быть частью публикации, быть частью комментария (если, скажем, у вас была пометка имени пользователя), владеть публикацией и собственными комментариями. Простые отношения $hasMany или $belongsTo плохо справляются с двунаправленным характером этих отношений. Я рекомендую прочитать это: book.cakephp.org/view/1044/hasAndBelongsToMany-HABTM< /а> - person dclowd9901; 31.07.2011

Это очень зависит от вашей ситуации, но в моей старой школе это действительно было бы правильно, хотя, возможно, и не нужно добавлять отношения.

У учителя много учеников В классе один учитель В классе много учеников

Однако передвигаются ли студенты? Нужны ли отношения между учениками и классом? Я думаю, что наиболее определяющими в данном случае являются отношения учитель-ученик. Тогда, возможно, учитель-класс. Вы можете предположить, основываясь на этих отношениях, что некоторые ученики являются частью класса.

Следовательно:

Класс - Учитель -‹ Ученики Класс (есть один) Учитель (много) Ученики

Затем вы найдете учеников класса через Учителя.

person RustyFluff    schedule 29.07.2011