2016-09-06 3 views
2

Я строю запрос в своем редакторе MySQL, но теперь я хочу преобразовать этот SQL ниже в построителе запросов SQL в Laravel 5, может кто-нибудь мне помочь? Я много искал о том, где условие IF в Laravel, но не было найдено.Как я могу запросить сборку Где условие IF в Laravel

select * 
from eventos 
where inicio = '2016-09-06 09:41' 
and recorrencia = 0 
or recorrencia = 1 
and 
(
    if (recorrencia_tipo = 'semanal', recorrencia_intervalo, 7) LIKE concat('%', weekday('2016-09-06 00:00:00'), '%') 
     or 
    if(recorrencia_tipo = 'mensal', recorrencia_intervalo, 0) = day('2016-09-06 09:41') 
     or 
    (
     if (recorrencia_tipo = 'anual', substring_index(recorrencia_intervalo, '/', 1), 0) = DAY('2016-09-06 09:41') 
      or 
     if (recorrencia_tipo = 'anual', substring_index(recorrencia_intervalo, '/', -1), 0) = MONTH('2016-09-06 09:41') 
    ) 
) 

Я построил до этого в Laravel

Evento::where('inicio', '2016-09-06 09:41') 
      ->where('recorrencia', 0) 
      ->orWhere('recorrencia', 1) 
      ->where('recorrencia_tipo', function ($query) { 
      })->get(); 
+0

Почему бы вам просто не попробовать сырой запрос один раз? – vijaykumar

+0

Спасибо, ваш ответ мне очень помогает = D –

ответ

0

Я не знаю, если это правильный путь, но я сделал это с помощью whereRaw как @vijaykuma сказал.

Следовать в запросе

$eventos = Evento::where('inicio', $data) 
      ->where('recorrencia', 0) 
      ->orWhere('recorrencia', 1) 
      ->whereRaw(" 
       IF (recorrencia_tipo = 'semanal', recorrencia_intervalo, 7) LIKE concat('%', weekday('{$data}'), '%') 
        OR 
       IF (recorrencia_tipo = 'mensal', recorrencia_intervalo, 0) = DAY('{$data}') 
        OR 
       (
        IF (recorrencia_tipo = 'anual', substring_index(recorrencia_intervalo, '/', 1), 0) = DAY('{$data}') 
         AND 
        IF (recorrencia_tipo = 'anual', substring_index(recorrencia_intervalo, '/', -1), 0) = MONTH('{$data}') 
       ) 
      ")->get(); 
0

Попробуйте это:

Evento::where('inicio', '2016-09-06 09:41') 
     ->where('recorrencia', 0) 
     ->orWhere('recorrencia', 1) 
     ->where('recorrencia_tipo', function ($query) { 
      if(condition){ 
      $query->select('column')->from('table')->where('where clause'); 
      } 
      else{ 
      $query->select('column')->from('table')->where('where clause'); 
      } 
     }) 
     ->get(); 

Надеется, что это помогает =)

0

Если вы приземлились здесь пытаемся сделать IF работы в рамках SELECT, это может помочь:

$query = DB::table('mytable') 
    ->select(DB::raw('id,title,IF(some_column = 1, some_column,null) as some_column')) 
    ->get(); 

Имейте в виду: https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html

IF (expr1, expr2, expr3)

Если выражение1 ИСТИНА, IF() возвращает expr2. В противном случае он возвращает expr3.

Смежные вопросы