我正在尝试使用Laravel中的Query Builder编写查询。我有一个名为'packages'
的表,其中包含'activities'
列。该列具有存储为序列化数组的值。例如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();
应该选择至少有一个活动的所有行。即在上面的例子中,它应该选择活动中至少有2,5或1的所有行。我想要使用Laravel Query Builder的解决方案。请帮忙。
答案 0 :(得分:0)
使用序列化功能
$query = DB::table('packages');
$query = $query->where('activities', serialize($arr));
$packages = $query->get();
答案 1 :(得分:0)
首先你必须使用php中的serialize() function将数组转换为序列化数组
$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();