使用序列化数组

时间:2017-10-06 04:46:16

标签: php mysql laravel

我正在尝试使用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的解决方案。请帮忙。

2 个答案:

答案 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();