2017-10-06 42 views
0

我想在Laravel中使用查詢生成器編寫查詢。我有一個名爲'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

我不認爲這是可能的使用serialize() function數組轉換成連載陣列。也許你應該嘗試使用JSON來代替varchar列。 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

它應該選擇所有至少有一行活動。我已經更新了這個問題。 – user1690835

+0

當你想檢查活動不是空的,然後在where子句中通過多個條件,檢查更新的答案 –

+0

不,我的意思是,至少有一個活動在$ arr中。 – user1690835