首页 > 解决方案 > 带有 Join 和 If 条件的 Laravel 查询生成器

问题描述

如何在查询生成器的结果中使用 if else 条件?

$data = DB::table('peminjaman')
                        ->select('peminjaman.id as id_peminjaman',
                                'reads.pageread',
                                'books.*',
                                'pengarang.name as pengarang_name'
                                )
                        ->join('reads','reads.id_book','peminjaman.id_book')
                        ->join('books','books.id','=','reads.id_book')
                        ->join('pengarang','pengarang.id','=','books.idpengarang')
                        ->where('peminjaman.id_user',$user->id)
                        ->orderBy($sort,$urut)
                        ->get();
   

我想使用一些这样的条件,在实际情况下会有很多其他的地方,以及用于我上面声明连接的表格

  if($statment=="notread"){
            where('reads.pageread', '=',0);
        }
        if($statment=="read"){
            where('reads.pageread', '=',1);
        }
        if($statment=="bigbook"){
            where('books.bigbook', '=',1);
        }      

  

标签: laraveleloquentlaravel-8query-builderlaravel-query-builder

解决方案


只需复制粘贴您的查询并进行一些修饰,这就是结果。只需改进您的查询生成器,以防您想让它更复杂

$data = DB::table('peminjaman')
->select(
         'peminjaman.id as id_peminjaman',
         'reads.pageread',
         'books.*',
         'pengarang.name as pengarang_name'
        )
->join('reads', 'reads.id_book', '=', 'peminjaman.id_book')
->join('books', 'books.id', '=', 'reads.id_book')
->join('pengarang', 'pengarang.id', '=', 'books.idpengarang')
->where('peminjaman.id_user', $user->id)
->when($statement, function($query, $statement){
      if($statement === 'notread'){
            return $query->where('reads.pageread', 0);
      } elseif($statement === 'read'){
            return $query->where('reads.pageread', 1);
      } elseif($statment=="bigbook"){
            return $query->where('books.bigbook', 1);
      }
})
->orderBy($sort, $urut)
->get();

推荐阅读