Laravel или где два условия не так очевидны - PullRequest
2 голосов
/ 30 октября 2019

Почему в Eloquent простой запрос, так как этот не работает?

$matches = DB::table("matches")
   ->where(["team_a"=> $request->tid, "match_tipo"=>3])
   ->orWhere(["team_a"=> $request->tid, "match_tipo"=>3])
   ->first();

В соответствии с другими примерами, приведенными здесь на Stackoverflow , я должен использовать запрос в Где:

$matches = DB::table("matches")
 ->where(["match_tipo"=>3])
 ->where(function($query, $request) {
      $query->where('team_h',$request->tid)
            ->orWhere('team_a',$request->tid);
      })
->first();

Но я должен передать второй параметр ($ request).

Как проще всего выполнить этот запрос?

Ответы [ 3 ]

2 голосов
/ 30 октября 2019

Вы можете сделать это следующим образом.

->where(["match_tipo"=>3]) это будет ->where("match_tipo",3) и use($tid) после запроса.

$tid = $request->tid; 
$matches = DB::table("matches")
 ->where("match_tipo",3)
 ->where(function($query) use($tid) {
      $query->where('team_h',$tid)
            ->orWhere('team_a',$tid);
      })
->get();
0 голосов
/ 30 октября 2019

Попробуйте этот запрос:

$matches = DB::table("matches")
   ->where('match_tipo',3)
   ->whereRaw('team_a = "'.$request->tid.'" OR team_h = "'.$request->tid.'"')
   ->first();
0 голосов
/ 30 октября 2019

при использовании обратного вызова или замыкания в качестве параметра , где , у вас будет только один аргумент: Текущий объект

Методы Можноиспользуется для передачи запроса $

Первый метод

$matches = DB::table("matches")
 ->where(["match_tipo"=>3])
 ->where(function($query) use ($request) {
      $query->where('team_h',$request->tid)
            ->orWhere('team_a',$request->tid);
      })
->first();

Второй метод

$matches = DB::table("matches")
    ->where('match_tipo','=',3)
    ->when($request->tid,function($query) use ($request) {
        return $query->where('team_h',$request->tid)
              ->orWhere('team_a',$request->tid);
        })
   ->first();
...