首页 文章

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

提问于
浏览
13

我有一个雄辩的模特,

User :用户(身份证,用户名,密码,电子邮件,状态)

Profile :profiles(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 回答

  • 34

    这就是 whereHas 派上用场的地方:

    $user = User::with('Profile')->where('status', 1)->whereHas('Profile', function($q){
        $q->where('gender', 'Male');
    })->get();
    

    基本上它增加了用户需要具有 gender = Male 的配置文件的条件

  • 4

    如果要在关系模型中搜索多个列 .

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

相关问题