2017-10-06 7 views
0

Laravelのクエリビルダを使用してクエリを作成しようとしています。私は列'activities'を持っている'packages'という名前のテーブルを持っています。列には、シリアル化された配列として格納された値があります。たとえば、a:1:{i:0;s:1:"2";}です。今度は、「アクティビティ」列の値を比較して表を検索したいと考えています。例えば、私は配列を持っています$arr = array(0=>2, 1=>5, 2=>1)'activities'と比較したいと思います。シリアル化された配列を使用してテーブルを検索する

$query = DB::table('packages'); 
$query = $query->where('activities', $arr); 
$packages = $query->get(); 

少なくとも1つのアクティビティを持つすべての行を選択する必要があります。上記の例では、少なくとも2,5または1のアクティビティを持つすべての行を選択する必要があります。私は、Laravel Query Builderを使用してソリューションを欲しいです。助けてください。

+0

私はこれが可能だとは思わないでserialize() functionを使用してシリアル化配列に配列を変換する必要があります。 varcharカラムの代わりにJSONを使用してみてください。 https://laravel.com/docs/5.5/queries#json-where-clauses –

+0

[mysqlデータベースのシリアル化フィールドから検索するにはどうすればよいですか?](https://stackoverflow.com/questions/24508164/how -do-i-search-from-serialize-field-in-mysql-database) – AZinkey

+0

これらのアクティビティをカンマで区切った値(2,5,1など)で保存する代わりに、文字列をシリアライズ – AZinkey

答えて

0

使用シリアル化機能

$query = DB::table('packages'); 
$query = $query->where('activities', serialize($arr)); 
$packages = $query->get(); 
0

まず、あなたは、PHP

$arr = serialize($arr); 

$data = $query->where([['activities', $arr], ['activities', '<>', '']])->get()->toArray(); 

$data = unserialize($data); 

$activities = !empty($data) ? $data['activities'] : ''; 

@if(!empty($activities)) // check condition if activities are not empty 

$result = $data; // database data 

@enfif 


OR 

$data = $query->where('activities', 'like', '%' . $arr .'%')->get(); 
+0

少なくとも1つアクティビティ。私は質問を更新しました。 – user1690835

+0

チェックアクティビティを空ではなく、where節に複数の条件を渡したい場合は、更新された回答を確認してください。 –

+0

いいえ、$ arrにあるアクティビティが少なくとも1つはありません。 – user1690835

関連する問題