sql - switch - push laravel
Laravel Eloquent Select CASE? (2)
¿Hay alguien con experiencia en PHP y Laravel Eloquent que pueda ayudarme a resolver esta afirmación? Estoy tratando de inyectar un CASO ... CUANDO .. FIN ... dentro de un método raw (). Parecía que estaba completamente ignorado. La documentación existente no ha sido. He intentado varias cosas diferentes para no prevalecer. Estoy tratando de llevar esto a cabo:
SELECT shares.id, ...,
CASE WHEN users.id = <CurrentUser> THEN 1 ELSE 0 END AS is_user,
...
FROM <table>
...
El código fuente está abajo:
$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();
Alternativamente, puede utilizar selectRaw
en selectRaw
lugar.
->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'')
Mueva su llamada raw()
dentro de la instrucción SELECT
:
->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'')