2013-06-13 30 views
11

PHP & Laravel Eloquent'de bu ifadeyi çözmemde bana yardımcı olabilecek biri var mı? Bir CASE ... WHEN .. END ... bir raw() yönteminin içine enjekte etmeye çalışıyorum. Tamamen göz ardı edilmiş gibi görünüyordu. Mevcut belgeler olmadı. Hakim olmak için birkaç farklı şey denedim.Laravel Eloquent CASE Seçin?

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

kaynak kod aşağıda:

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

cevap

29

SELECT deyimi içinde sizin raw() çağrıyı taşıyın:

->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') 

Gönderen: https://laravel.com/docs/5.4/queries#raw-expressions

Bu kapalı çekmeye çalışıyorum
0

Alternatif olarakkullanabilirsiniz Bunun yerine.

->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')