找到所有复杂的模型

时间:2014-08-30 06:37:16

标签: php cakephp

我只需要查找4个相关表中的详细信息。我查看了文档,我可以从2个表中获取数据,但不能从其他表中获取数据。 我有一个课程表,我只能显示相关的教师ID行。这很好用。我有一个课程 - 学生表与FK课程ID的课程表相关。从这个课程 - 学生表我然后链接到另一个表。

课程表(fk tutor_id但没有student_id) 导师表(通过tutor_id链接到课程表) lessons_students表(与lessonID链接并具有studentID HABTM) 学生表(与课程学生表中的studentID相关联)

所以,如果我从课程表中得到一行,我想要导师姓名(来自导师表,我现在可以这样做),学生姓名通过studentID。这是4个表,这是一个令人头疼的问题,因为文档只是做了简单的例子。我无法显示学生姓名或学生ID

http://book.cakephp.org/2.0/en/models/retrieving-your-data.html

我试过这个,我猜是因为我有一个HABTM和一个belongsTo关系。因为我在谷歌搜索答案几个小时,所以必须在某处记录。

$ this-> set('student',$ this-> Lesson-> find('all',array('conditions'=> array('Lesson.id'=> 2),     'contains'=> array('Student'=> array('conditions'=> array('Student.id'=>'Lesson.id'))))));

class LessonsController extends AppController {
   $this->set( 'tutor',$this->Lesson->find('all', array(
             'conditions'=>array('Lesson.Tutor_id'=> 1,'Lesson.id'=>'Lesson_Students.lesson_id') ) ));



view
////////

  <?php 
      foreach ($tutor as $item):

        echo '<tr><td>'. $item['Lesson']['id'].'</td>';
      //  echo '<td>'. $item['Tutor']['id']['username'].'</td>';
        echo '<td>'. $item['Lesson']['tutor_id'].'</td>';
         echo '<td>'. $item['Tutor']['last_name'].'</td>';  
           echo '<td>'. $item['Lesson_Student']['student_id'].'</td>'; 
        echo '</tr>';
     endforeach;
     unset($item);

1 个答案:

答案 0 :(得分:1)

我通过手动将所有需要的连接添加到选项数组来解决了类似的问题:

'joins' => array(
    array(
        'table' => 'sales',
        'alias' => 'Sale',
        'type' => 'LEFT',
        'conditions' => array(
            'Sale.serialnumber_id = Serialnumber.id'
        )
    ),
    array(
        'table' => 'rentals',
        'alias' => 'Rental',
        'type' => 'left',
        'conditions' => array(
            'Rental.serialnumber_id = Serialnumber.id'
        )
    ),
)

然后,您可以在conditions-array中使用所有这些字段,并将它们添加到fields-array。

要优化整个查询,您应该只检索所需的字段 - 通过添加fields选项。 SELECT *查询(像这一个)查询很慢,如果无用的流量会产生很多,特别是当你查询多个表时。