【问题标题】:CakePHP Model Relationships without resorting to RecursiveCakePHP 模型关系而不求助于递归
【发布时间】:2011-09-02 16:58:16
【问题描述】:

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

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

类属于位置
类属于类类型
类 hasMany ScheduledClass
ScheduledClass 属于 Instructor

我的问题是当我使用时:

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

我只从 Class、Location、ClassType 和 ScheduledClass 模型中获取数据。我没有从 Instructor 模型中获得任何数据。

我可以将递归值设置为“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 来获取正确的数据,但我无法让任何一个工作(可能是由于我误解了它们的用途)。

提前谢谢你!

【问题讨论】:

    标签: cakephp model


    【解决方案1】:

    使用 Containable 并设置您希望查找如何响应并获取您想要的数据。

    在模型中

    var $actsAs = array('Containable');
    

    在控制器中你可以做这样的事情

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      • 2021-09-19
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多