关于 Laravel 的 with 多表查询问题
现在有三张表,schools
,students
,books
,关联关系如下:
现在要做一个搜索功能,要搜索书的借出信息,有三个输入框,分别对应三个关键词,
<input type="text" name="book_name">
<input type="text" name="student_name">
<input type="text" name="school_name">
school_name
,student_name
,book_name
,有以下几种情况:
- 当输入的
book_name
为死刑宣告
,其余为空,检索所有死刑宣告
的书籍借记信息; - 当输入
book_name
为死刑宣告
,student_name
为熊仔
(加入熊仔
借了死刑宣告
这本书),其余为空时,检索该书与熊仔
的借记情况,于是我写代码如下:
Book::where('name','死刑宣告')->with(['user'=>function($query){
$query->where('name','不知道谁'); // 这里并没有 不知道谁这个用户
}])->get();
这样得到的结果很蛋疼
[
{
id:1,
name:'死刑宣告'
user:null
}
]
,这个结果很不符合预期啊,我预期的结果是
[]
写到这里,突然感觉有些异样,感觉
Book这个模型与with的关系
这个知识点没有搞清,希望大神来讲解一下。
后续还有个三表关联的搜索,代码如下:
Book::where('name','死刑宣告')->with(['user'=>function($query){
$query->where('name','不知道谁')->with('school' => function($query){
$query->where('name',$school_name);
});
}])->get();
因为上面的问题,这个也是不对的。望大牛指点下!!
推荐文章: