Laravel 在模型属性上创建whare子句
如何在laravel模型属性上创建Laravel 在模型属性上创建whare子句,laravel,eloquent,orm,model,relation,Laravel,Eloquent,Orm,Model,Relation,如何在laravel模型属性上创建where子句 我在用户和书籍之间有以下关系。其中,用户拥有许多书籍,而书籍模型属于单个用户 我想选择属于用户\u id=2的所有页数>100的书籍 我将Laravel5.2与mysql结合使用,并为User定义了一个模型,为Book 当我想获取特定用户的所有书籍时,我需要一个用户 return User::find(2)->books; 这个很好用。但是我想买那些页数超过100页的书。我使用: return User::find(2)->book
where
子句我在
用户
和书籍
之间有以下关系。其中,用户拥有许多
书籍,而书籍
模型属于单个用户我想
选择属于用户\u id=2的所有页数>100的书籍
我将Laravel5.2与mysql结合使用,并为User
定义了一个模型,为Book
当我想获取特定用户的所有书籍时,我需要一个用户
return User::find(2)->books;
这个很好用。但是我想买那些页数超过100页的书。我使用:
return User::find(2)->books->where([['pages', '>', 100], ['chapters', '>', 3]]);
但是不起作用
用户模型:
class User extends Authenticatable
{
public function books()
{
return $this->hasMany('App\Book');
}
}
图书模型
class Book extends Model
{
public function user()
{
return $this->belongsTo('App\User');
}
}
我希望获得所有用户id为0且页面>100且章节>3的书籍您将希望访问关系方法
books()
,而不是属性books
。文档中的一些引用:
由于所有类型的雄辩关系都是通过方法定义的,因此您可以调用这些方法来获取关系实例,而无需实际执行关系查询。此外,所有类型的有说服力的关系还充当查询生成器,允许您在最终对数据库执行SQL之前,继续将约束链接到关系查询上
如果不需要向雄辩的关系查询添加其他约束,则可以像访问属性一样访问该关系
示例解决方案:
返回用户::查找(2)
->书籍()
->其中([[pages','>',100],[chapters','>',3]])
->get();
请注意,我们正在使用books()
访问HasMany
关系,并在其上使用where()
querybuilder方法来创建约束。然后,为了完成并执行查询,我们在最后调用get()
。如果没有,只需返回菊花链查询生成器
您以前的代码可能不会出错,因为从
User::find(2)->books
返回的值将是一个集合对象,它实际上有一个where()
方法。由于您传递的数组格式,它可能没有任何匹配项。要在相关模型上添加where clouse,我们可以使用whereHas()
函数
由于您想要书籍,请从书籍
模型开始
$books=Book::where([
[pages','>',100],
[chapters','>',3],
])
->whereHas('user',函数($query){
$query->where('id',2);
})
->get();