我只需要查找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);
答案 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 *查询(像这一个)查询很慢,如果无用的流量会产生很多,特别是当你查询多个表时。