我有两个查询,一个是数据较轻,使用数据透视表作为过滤器从主表中获取数据(在这种情况下是学生)。
$students=\DB::table('student')->join('school_student', 'student.id', '=','school_student.student_id')->get();
这将从控制器返回查询结果。但是不会装入刀片:
$this->layout->content=\View::make('admin.students.index')->with('student', $students);
此版本返回类似的更多数据(即每次输出所有学校数据) 但是在刀片上工作。
$students = \Student::with(array('schools' => function($query){$query->where('school_id', '=', 1);}))->get();
只是数据库和视图不兼容吗? 如果是这样,什么是Laravel 4方法来查询一个表及它的仅支点。
任何帮助表示赞赏。
在刀片中
@if($student->count())
第一个示例产生此错误:
Call to a member function count() on a non-object
答案 0 :(得分:1)
DB::...->get()
会返回一个数组,因此您无法在其上调用->count()
(因此"非对象"),但您需要count($students)
当您执行更多重要数据时,->count()
的原因有效。方法是您使用Eloquent并返回Eloquent Collection
s。
所以,基本上,你做了两件不同的事情,期望对待他们。
此外,虽然我在这里,但我应该指出,我认为您的Eloquent查询并不完全正确。首先,你将id硬编码为1(而在DB风格的查询中,你不关心学校ID,你只是用它来加入数据透视表 - 也许你使用了一个不完整的查询),但你也在使用with
,但你应该看看has
。 with
热切加载模型,但如果您只想检查连接表上的条件,则has
就是您想要的。