2017-03-07 35 views
0

所以我有一個數據表叫漆像下面如何從mysql數據庫中的數據在陣列

id   name    allow_on 
------------------------------------------ 
1    Avian   Wall|Roof|Wood 
2    Avitex   Wall|Roof|Iron 
3    Nippon   Floor|Iron 
4    Some   Plastic|Cloth|other 

以及如何基於allow_on列拿到領域,如「我想塗料可以用在牆」,到目前爲止我的代碼看起來像這樣

$paints = Paint::get(); 
foreach($paints as $paint) 
{ 
    $exp = explode("|", $paint->allow_on); 
    foreach($exp as $pnt) 
    { 
     if(in_array($request->paint_name,$pnt)) 
     { 
      var_dump($pnt) 
     } 
    } 
} 

我使用Laravel 5.4,但我不能讓它工作,任何解決方案?提前致謝。

+0

什麼是錯誤? – Sebastian

+0

實際上,我不知道如何根據請求查詢數據,我上面解釋過,(我想繪製可以在牆上使用的繪圖),所以我需要建議如何查詢這些數據:D –

+2

您的問題源於錯誤的數據庫設計。將數據放在列中作爲分隔列表。它使查詢數據變得更加複雜。 – RiggsFolly

回答

1
$want = 'Wall'; 
$allowed = Paint::where('allow_on', 'like', '%'.$want.'%')->get(); 

foreach ($allowed as $allowedPaint) { 
    echo $allowedPaint->name; 
} 

以上將讓你的所有可以在牆上使用的油漆。如果您只需要檢索油漆名稱,則可以使用:

$allowed = Paint::where('allow_on', 'like', '%'.$want.'%')->pluck('name'); 
var_dump($allowed); 
+0

但是我得到一個空對象:/ –

+0

@RizalFakhri'$ allowed'在第一個案例中將是雄辯的集合,在第二個案例中將是陣列。檢查更新的答案。 – Jomoos

+0

對不起我的錯誤> _ <區分大小寫,Thx它的作品:D –

1

您正在使用in_array()

時,草垛應該是在你的例子即$exp數組的數組混淆使用的針和乾草堆的

$paints = Paint::get(); 
foreach($paints as $paint) 
{ 
    $exp = explode("|", $paint->allow_on); 

    if(in_array($request->paint_name,$exp)) { 
      // yes paint_name is in the array 
    } 
}