2016-10-11 12 views
0

チケットのラベルを格納するテーブルを作成しました。私は値の列にコンマ(、)区切り文字列として複数のラベルを保存しました。Laravelクエリビルダのキー/値ペア

+----+-----------+-------+---------------+---------------------+---------------------+ 
| id | ticket_id | key | value   | created_at   | updated_at   | 
+----+-----------+-------+---------------+---------------------+---------------------+ 
| 9 |  22 | label | Important,Bug | 2016-10-10 14:48:07 | 2016-10-10 14:48:07 | 
| 17 |  21 | label |    | 2016-10-10 16:46:13 | 2016-10-10 16:46:13 | 
+----+-----------+-------+---------------+---------------------+---------------------+ 

今、私はラベルを検索し、関連するTICKET_IDを取得する必要がありますが、私の検索用語は

答えて

1

あなたはそのような何かを試してみてくださいクエリを記述するために私を助けてください、アレイ

array:1 [ 
    0 => "Important" 
] 

です:

$query = Model::where('value','like','%' . $array[0] . '%'); 

for($i = 1; $i < sizeof($array); $i++) { 
    $query->orWhere('value','like','%' . $array[i] . '%'); 
} 

return $query->get(); 

警告、最初のwhereメソッドが必要です5.3リリース後のy。その前に、orWhere句で直接始めることができます。

ここで、優位なスコープは、スコープの制約の主要ブール値を尊重します。 たとえば、orWhere制約を使用してスコープを開始する場合は、 はnormalに変換されなくなります。 この機能(ループ内に複数の制約を追加するなど)を使用している場合は、 のブール論理問題を回避するための最初の条件が通常であることを確認する必要があります。

+0

あなたの答えのおかげで、しかし、それは2つの行値を与えているが、それは唯一の生を与える必要があります。 –

0
$filter = new Filter(); 
$query = $filter->where('key', 'label') 
       ->where(function($query) use($labels) { 
        for ($i = 0; $i < count($labels); $i++) { 
         $query->orWhere('value', 'LIKE', '%' . $labels[$i] . '%'); 
        } 
       }) 
       ->get(); 

return $query;