Laravel雄辩地搜索相关模型的字段

时间:2015-03-07 08:42:10

标签: laravel eloquent

我有一个雄辩的模型,

用户用户(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();

2 个答案:

答案 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 . '%');
                });
            });

        });