查找所有复杂模型
Posted
技术标签:
【中文标题】查找所有复杂模型【英文标题】:find all on complex model 【发布时间】:2014-08-30 06:37:16 【问题描述】:我只需要从所有 4 个关联表中的查找中获取详细信息。我查看了文档,我可以从 2 个表中获取数据,但不能从其他表中获取数据。 我有一个课程表,我可以在其中只显示相关的导师 ID 行。这工作正常。我有一个与 FK 课程 ID 上的课程表相关的课程学生表。然后从这个课程学生表中,我将一个字段链接到另一个表。
课程表(fkutor_id 但没有 student_id) 导师表(链接到带有导师 ID 的课程表) Lesson_students 表(与课程 ID 链接并有一个学生 ID HABTM) 学生表(与课程学生表中的学生ID链接)
所以如果我从课程表中得到一行,我想要导师姓名(来自导师表,我现在可以这样做),通过 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), 'contain' => 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);
【问题讨论】:
当我对 find 进行调试时,我确实得到了学生行,但我似乎无法将其打印出来。回声'我通过手动将所有需要的连接添加到选项数组中解决了类似的问题:
'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'
)
),
)
然后您可以在条件数组中使用所有这些字段并将它们添加到您的字段数组中。
要优化整个查询,您应该只检索您需要的字段 - 通过添加字段选项。一个 SELECT * 查询(比如这个)是一个很慢的查询,如果无用的话会产生很多流量,尤其是当您查询多个表时。
【讨论】:
感谢您的回复。好的,但我怎样才能做到这一点并从同一个查找所有的 belongsTo 表中获取数据? 我在答案中尝试了上面的代码,但我无法在视图中显示数据。我看到了数组,但显示视图中的数据不起作用.... foreach ($student as $item2): echo '以上是关于查找所有复杂模型的主要内容,如果未能解决你的问题,请参考以下文章