2016-09-06 7 views
2

Ich bin eine Abfrage in meinem MySQL-Editor erstellen, aber jetzt möchte ich diese SQL unten in einem Abfrage-Generator SQL in Laravel 5, kann mir jemand helfen? Ich habe viel über Where IF Zustand in Laravel gesucht, aber wurde nicht gefunden.Wie kann ich abfragen Build Wo IF Bedingung in 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') 
    ) 
) 

ich gebaut, bis diese in Laravel

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

Warum versuchen Sie nicht einmal rohe Abfrage einmal? – vijaykumar

+0

Danke Kumpel, deine Antwort hilft mir sehr viel = D –

Antwort

0

Ich weiß nicht, ob dies der richtige Weg ist, aber ich habe es mit whereRaw wie @vijaykuma sagte.

Folgen Sie der Abfrage

$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

Try this:

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

Hope it =)

0

Wenn Sie schon hier gelandet Versuch zu machen, wenn die Arbeit im Rahmen der SELECT hilft, dies könnte helfen:

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

Denken Sie daran: https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html

IF (expr1, expr2, expr3)

Wenn expr1 TRUE ist, IF() expr2 zurück. Andernfalls wird expr3 zurückgegeben.

Verwandte Themen