在Laravel中如何按关系过滤?

时间:2019-03-15 15:36:10

标签: laravel eloquent

我有两个相互关联的模型:

class Task extends Model{
   public function user(){ 
      return $this->belongsTo('App\User', 'user_id');
   }
}

class User extends Model{
   public function tasks(){ 
      return $this->hasMany('App\Task', 'user_id');
   }
}

现在我想创建一些搜索或过滤系统。

用户可以选择一个表格,然后再选择其参数(年龄,性别等)

我该怎么做?我试图在关系上使用newQuery但... 任何帮助,谢谢

2 个答案:

答案 0 :(得分:2)

我希望我能很好地理解你。 像这样

使用嵌套的wherewhereHas
$tasks = Task::where('condition', $var)
               ->orWhereHas('user', function($q) use ($var){
                     $q->where('condition', 'LIKE', '%'. $var.'%');
                });

答案 1 :(得分:0)

尝试一下。我希望它对您有用。

使用连接从两个表中获取数据

function getBuildings($request) {
        if (isset($request->keyword) && $request->keyword != '') {
            $data = $this->where(function($query) use ($request) {
                $query->orWhere('users.column_name', 'LIKE', '%' . $request->keyword . '%');
                $query->orWhere('users.column_name', 'LIKE', '%' . $request->keyword . '%');
            });
        }
        $datacount = $this->count();
        $dataArray = $this->select('users.*,task.whatever data you want to get from task');
        if ($request->length == -1) {
            $dataArray = $dataArray->get();
        } else {
            $dataArray = $dataArray->skip($request->start)->take($request->length)->get();
        }
        return [$datacount, $dataArray];
    }