我有一个雄辩的模型,
用户:用户(ID,用户名,密码,电子邮件,状态)
个人资料:个人资料(id,user_id,first_name,last_name,gender,dob)
在控制器逻辑中,我急切地加载Profile模型。
我可以这样做,
$user = User::with('Profile')->get();
或
$user = User::with('Profile')->where('status', '1')->get();
但是如何做,
$user = User::with('Profile')->where('status', '1')->where('gender', 'Male')->get();
答案 0 :(得分:35)
这就是whereHas
派上用场的地方:
$user = User::with('Profile')->where('status', 1)->whereHas('Profile', function($q){
$q->where('gender', 'Male');
})->get();
基本上,它添加了用户需要拥有gender = Male
答案 1 :(得分:5)
如果要搜索关系模型中的多个列。
$searchText = 'test text';
Product::with('owner')->where(function($query) use ($searchText)
{
$query->where('product_name', 'LIKE', '%' . $searchText . '%');
$columns = ['product_code', 'place_location', 'remark'];
foreach ($columns as $column ) {
$query->orWhere($column, 'LIKE', '%' . $searchText . '%');
}
$query->orWhereHas('owner', function($q) use ($searchText) {
$q->where(function($q) use ($searchText) {
$q->where('name', 'LIKE', '%' . $searchText . '%');
$q->orWhere('company_name', 'LIKE', '%' . $searchText . '%');
});
});
});