web-dev-qa-db-ja.com

laravel querybuilder where関数のように使用する方法

$ book = array( 'book1'、 'book2'); $ book配列要素の数値は可変です。 2要素または20要素の可能性があります
次のようなクエリを実行する必要があります:

select * from book where bookname like %book1% or bookname like %book2%

laravel 5でこのクエリを作成するには、オプションがあります:

$name = DB::Table('bookinfo')
          ->select('*')
          ->wherein('bookname',$book)
          ->get();

しかし、それは=演算子like演算子を使用する必要があります

17
Al-Alamin

私を助けてくれたみんなに感謝しますが、私はそれを次のようにして解決しました:

$book = array('book2','book3','book5');  

$name = DB::Table('bookinfo')
        ->select('BookName', 'bookId')                
        ->Where(function ($query) use($book) {
             for ($i = 0; $i < count($book); $i++){
                $query->orwhere('bookname', 'like',  '%' . $book[$i] .'%');
             }      
        })->get();
27
Al-Alamin

1要素またはn要素の動的クエリの場合は、ステートメントをコレクションとして使用します。「いいね」の場合は、Rawステートメントを使用できます。

$collection = DB::Table('bookinfo')->select('*');
foreach($book as $key => $element) {
    if($key == 0) {
        $collection->where(DB::raw('bookname like %'.$element.'%'));
    }
    $collection->orWhere(DB::raw('bookname like %'.$element.'%'));
}
$name = $collection->get();

http://laravel.com/docs/5.1/queries

生の表現

または、次のように使用できます。

$collection = DB::Table('bookinfo')->select('*');
foreach($book as $key => $element) {
    if($key == 0) {
        $collection->where('bookname', 'like', '%'.$element.'%');
    }
    $collection->orWhere('bookname', 'like', '%'.$element.'%');
 }
 $name = $collection->get();
4
goldlife