2015-11-19 4 views
2

Я хочу построить динамику, где/или где-то вроде этого.Laravel 5.1 Динамический где/orWhere

$matchList = [ 'match1', 'match2', 'match3', 'match4' ]; 

$query->where('Column', 'Like', 'match1') 
->orWhere('Column', 'Like', 'match2') 
->orWhere('Column', 'Like', 'match3') 
->orWhere('Column', 'Like', 'match4'); 

Я пытался построить динамический вызов метода, но работа ... доцент

$matchList = [ 'match1', 'match2', 'match3', 'match4' ]; 

     $query->where('Column', 'Like', $hobbiesList[0]); 

     if(count($matchList) > 1) 
     { 
      for($i = 1; $i < count($matchList); $i++) 
      { 
       $query->{orWhere('Column', 'Like', $matchList[$i])}(); 
      } 
     } 

Проблема заключается в том, я получил список соответствия и для этого списка, я должен построить динамический оператор запроса в Larvel 5.1.

Может ли кто-нибудь помочь мне или объяснить, где моя ошибка?

ответ

2

Вам не нужно делать ничего сложного, просто используйте:

for($i = 1; $i < count($matchList); $i++) 
{ 
    $query->orWhere('Column', 'Like', $matchList[$i]); 
} 

Вы также, скорее всего, хотят использовать "%".$matchList[$i]."%" вместо просто $matchList[$i] в качестве значения.

+0

Спасибо годов. Моя проблема в том, что мой результат содержит ** все ** совпадения, но я хочу, чтобы мой результат должен содержаться только в параметре из списка совпадений. – ToyRobotic

+0

Можете ли вы отредактировать вопрос и показать, какие результаты вы получаете вместо того, что хотите? – Andrius

+0

Я идиот, все работает правильно ... моя ошибка. – ToyRobotic

0

Если вам не нужно использовать специальные символы, то вы должны использовать wherein:

$query->whereIn('Column', $matchList); 
0
$result = $model->where(function($query) use($where,$tj){ 
      foreach ($where as $wh){ 
       if($tj==1){ 
        $query->where($wh[0],$wh[1],$wh[2]); 
       }else { 
        $query->orWhere($wh[0], $wh[1], $wh[2]); 
       } 
      } 
     })->orderBy($sort,$order)->offset($from)->limit($rows)->get();