CakePHP模型关系,而不诉诸递归

时间:2011-09-02 16:58:16

标签: cakephp model

我是CakePHP的新手,我遇到了让我的所有模型正确链接的问题。

这是我在cakePHP中的模型布局:

类所属位置
类belongsTo ClassType
类hasMany ScheduledClass
ScheduledClass属于教练

我的问题是,当我使用时:

$this->Class->find('all')

我只从Class,Location,ClassType和ScheduledClass模型中获取数据。我没有从讲师模型中获取任何数据。

我可以将递归值设置为'2'并从Instructor模型中检索数据,但这会导致大量查询(每行一个)而不是“ScheduledClass.instructor_id = Instructor.id”上的连接”

我希望实现的目标是:

SELECT
...
...
FROM classes as Class
INNER JOIN locations as Location on Class.location_id = Location.id
INNER JOIN class_types as ClassType on Class.class_type_id = ClassType.id
INNER JOIN scheduled_classes as ScheduledClass on ScheduledClass.class_id = Class.id
INNER JOIN instructors as Instructor on ScheduledClass.instructor_id = Instructor.id

我尝试使用Containable和Joins来获取正确的数据,但我无法工作(可能是因为我误解了他们的用途)。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

使用Containable并设置查找的反应方式并获取所需的数据。

模型中的

var $actsAs = array('Containable');

并且在Controller中你可以做这样的事情

$this->data = $this->User->find('first', array('conditions' => array('User.id' => $this->Auth->user('id')), 'contain' => array('City', 'Region', 'Country', 'UserOccupations', 'UserGroup')));

如果你的模型/数据库关系设置正确,你可以提取你想要的确切数据,甚至选择你想要的列。