2013-06-13 26 views
11

Gibt es jemanden mit Erfahrung in PHP & Laravel Eloquent, wer kann mir helfen, diese Aussage zu lösen? Ich versuche, eine CASE ... WHEN .. END ... in eine rohe() Methode zu injizieren. Es schien, als ob es völlig ignoriert wurde. Die vorhandene Dokumentation wurde nicht erstellt. Ich habe mehrere verschiedene Dinge ausprobiert, um mich nicht durchzusetzen. Ich versuche, diese zu ziehen aus:Laravel Eloquent Select CASE?

SELECT shares.id, ..., 
    CASE WHEN users.id = <CurrentUser> THEN 1 ELSE 0 END AS is_user, 
    ... 
FROM <table> 
... 

Der Quellcode ist unter:

$shares = Share::where('shares.status', '=', SHARE_STATUS_APPROVED) 
        ->where('shares.deleted', '=', '0') 
        ->where('locations.lat', '<=', $nelat) 
        ->where('locations.lat', '>=', $swlat) 
        ->where('locations.lng', '>=', $nelng) 
        ->where('locations.lng', '<=', $swlng) 
        ->where('users.id', '=', $user) 
        ->orWhere('shares.connected_user_id', '=', $user) 
        ->join('users', 'shares.user_id', '=', 'users.id') 
        ->join('locations', 'locations.id', '=', 'users.location_id') 
        ->join('provinces', 'provinces.id', '=', 'locations.province_id') 
        ->join('countries', 'countries.id', '=', 'locations.country_id') 
        ->select('shares.id AS share_id', 'users.id AS user_id', 'shares.connected_user_id', 'shares.original_language_id', 'shares.image', 
         'users.first_name', 'users.last_name', 'users.email', 
         'locations.city', 'provinces.name', 'countries.code', 
         'locations.lat', 'locations.lng', 
         'shares.created_at') 
        ->raw('(CASE WHEN users.id = ' . $user . ' THEN 1 ELSE 0 END) AS is_user') 
        ->orderBy('shares.created_at', 'desc') 
        ->orderBy('users.id', 'asc') 
        ->orderBy('shares.connected_user_id', 'asc') 
        ->get(); 

Antwort

29

Bewegen Sie raw() Anruf innerhalb der SELECT Anweisung:

->select('shares.id AS share_id', 'users.id AS user_id', 'shares.connected_user_id',  
    'shares.original_language_id', 'shares.image', 
    'users.first_name', 'users.last_name', 'users.email', 
    'locations.city', 'provinces.name', 'countries.code', 
    'locations.lat', 'locations.lng', 
    'shares.created_at', 
    DB::raw('(CASE WHEN users.id = ' . $user . ' THEN 1 ELSE 0 END) AS is_user') 
) 
->orderBy('shares.created_at', 'desc') 

Von: https://laravel.com/docs/5.4/queries#raw-expressions

0

Alternativ können Sieverwendenstattdessen.

->selectRaw("shares.id AS share_id, users.id AS user_id , 
    shares.connected_user_id ,  
     shares.original_language_id, shares.image, 
     users.first_name, users.last_name, users.email, 
     locations.city, provinces.name, countries.code, 
     locations.lat, locations.lng, 
     shares.created_at, 
     (CASE WHEN users.id = {$user} THEN 1 ELSE 0 END) AS is_user)") 
    ->orderBy('shares.created_at', 'desc')