Как в Laravel фильтровать отношения? - PullRequest
0 голосов
/ 15 марта 2019

У меня есть две модели, которые связаны друг с другом:

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 ]

2 голосов
/ 15 марта 2019

Надеюсь, я вас хорошо понял. Используйте вложенные where и whereHas как таковые

$tasks = Task::where('condition', $var)
               ->orWhereHas('user', function($q) use ($var){
                     $q->where('condition', 'LIKE', '%'. $var.'%');
                });
0 голосов
/ 15 марта 2019

попробуйте это.Я надеюсь, что это будет работать для вас.

используйте объединение, чтобы получить данные из двух таблиц

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];
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...