2016-08-19 10 views
4

私はlaravelを初めて使用しています。レコードを取得する際にいくつか問題が発生しています。テーブルの構造は次のとおりです。Laravel 5.2 "AND"条件で "OR LIKE"を使用する方法

main_categories 
------------------ 
id  name 
1  NNN 
2  PPP 

categories 
----------------------------------- 
id  name main_category_id 
----------------------------------- 
1  abc   1 
2  xyz   2 
3  lmn   1 

services 
------------------ 
id categories 
------------------ 
1 a:2:{i:0;s:1:"1";i:1;s:2:"3";} 
2 a:1:{i:0;s:3:"2";} 
3 a:1:{i:0;s:3:"3";} 
4 a:2:{i:0;s:1:"1";i:1;s:3:"3";} 

サービスに格納されているカテゴリは、シリアル化された形式です。

フォームにはメインカテゴリに従ってドロップダウンがあり、各ドロップダウンにはサブカテゴリがあります。

データがこの形式であるポスト:

アレイ( [0] =>配列( [0] => 1、 [1] => 3、 )、 [1] = >配列( [0] => 2 ) )

このようなプロセスID:5つの主なカテゴリごとのようにドロップダウンやオプションが自分のサブカテゴリーであり、私はサブの間で条件を入れて「OR」にしたいですカテゴリーまたは同じメインカテゴリーと、他のメインケートの「OR」条件の他のセットとの「AND」条件ゴリー生のSQLで

私はこのクエリを実行します。Laravelで

SELECT * FROM `services` WHERE (`categories` LIKE '%"1"%' OR `categories` LIKE '%"3"%') AND (`categories` LIKE '%"2"%') 

私は次のことを試してみました:

$categories = [1,3]; 

\DB::table ('services') 
->where(function($q) use ($categories) { 
    foreach($categories as $category) { 
     $q->where('services.categories', 'like', '%"'.DB::raw($category).'"%'); 
    } 
}) 

しかし、これは動作しません。どのようにこれがLaravelで適切に行われるか。

+0

uを使用することができます 'orwhere' https://laravel.com/docs/5.2/queries#advanced-where-clauses – WalksAway

+0

@WalksAwayは、私はこれを試してみましたが、それはあります働いていない。それはカテゴリーが1または3のすべてのサービスを取得しますが、カテゴリーとして1,3を両方持つサービスのみが必要です – Pranab

+0

@WalksAway私は自分の質問を更新しました。今すぐチェックしてください – Pranab

答えて

0

私はあなたがorWhere()ためlookigされていると信じて:

orWhere('name', 'like', 'John') 
+0

あなたの返事をしてくれてありがとうございました。しかし、それは動作していません。それは1または3のカテゴリを持つすべてのサービスを取得しますが、カテゴリーとして1,3の両方を持つサービスだけが必要です – Pranab

+0

私の質問を更新しました今見てください – Pranab

1

コードは少し醜いですが、おそらくあなたのケースのために動作します。したがって、これを試してください:

$ categories = [1,3];このことができます

\DB::table ('services') 
->where(function($q) use ($categories) { 
    foreach($categories as $key => $category) { 
     if ($key == 0) { 
      $q->where('services.categories', 'like', '%"'.DB::raw($category).'"%'); 
     } else { 
      $q->orWhere('services.categories', 'like', '%"'.DB::raw($category).'"%'); 
     } 
    } 
}); 

希望...

+0

ありがとうございます。しかし、今再び私のクライアントは、彼の心を変更して要件を更新しました。質問を更新しました – Pranab

関連する問題