2017-08-29 1 views
0

Ich brauche die gleiche Abfrage für zwei verschiedene Benutzerrollen. Unterschied ist nur in einem whereNotIn Zustand.Wie ein- oder auszuschließen wo Anweisung in Laravel Eloquent

Also für den Grund Benutzer wäre es:

$chart2 = DB::connection('mysql2')->table('tv') 
        ->select('*') 
        ->join('epgdata_channel', 'cid', '=', 'channelid') 
        ->where('ReferenceDescription', $campaign->spotid) 
        ->whereNotIn('ChannelName', $sky) 
        ->get(); 

Und für Premium:

$chart2 = DB::connection('mysql2')->table('tv') 
        ->select('*') 
        ->join('epgdata_channel', 'cid', '=', 'channelid') 
        ->where('ReferenceDescription', $campaign->spotid) 
        ->get(); 

Ich weiß, dass ich es mit einfachen if-Anweisung tun:

if($user->userRole == "Basic"){ 
    //first $chart2 
} 
    else{ 
    //second $chart2} 

aber Ich habe eine Menge von Abfragen, wo ich nur diese whereNotin Bedingung hinzufügen oder entfernen und die Abfragen neu schreiben (mit if Statements t) ist keine nette Lösung.

Antwort

1

Versuchen Sie scope.

In Ihrem TVModel.php:

public function scopeConditionalWhereNotIn($query, $doesUse, $col, $val) { 
    if($doesUse) 
     $query->whereNotIn($col, $val); 
} 

Verbrauch:

$condi = true;//or false. 
$chart2 = TVModel::select('*') 
       ->join('epgdata_channel', 'cid', '=', 'channelid') 
       ->where('ReferenceDescription', $campaign->spotid) 
       ->conditionalWhereNotIn($condi, 'ChannelName', $sky) 
       ->get(); 
0

In Ihrem Modell hinzufügen:

public function scopeBasicUser($query,$channel){ 
return $query->whereNotIn('ChannelName', $channel); 
} 

und in Ihrem Controller:

$query = DB::connection('mysql2')->table('tv') 
     ->select('*') 
     ->join('epgdata_channel', 'cid', '=', 'channelid') 
      ->where('ReferenceDescription', $campaign->spotid); 
if($user->userRole == "Basic") 
    $query = $query->basicUser($channel); 
return $query->get();