php laravel laravel-4 eloquent

php - Laravel 4 Query Builder: IZQUIERDA UNIRSE... Y... consulta



laravel-4 eloquent (6)

Estoy intentando seleccionar todos los resultados de una tabla y combinarlos con otra tabla cuando coincida la ID de usuario.

Tengo tres tablas: ejecuciones, usuarios y una tabla dinámica run_user. Quiero seleccionar todos los resultados de ''ejecuciones'' y columnas adicionales en la tabla dinámica (que son ''completado'', ''pegajoso'', ''last_tested'' y ''dificultad''), pero solo extraer datos de run_user para el usuario actual.

En SQL sin formato he logrado hacerlo a través de un LEFT JOIN con una instrucción AND:

SELECT runs.startpoint, runs.startpostcode, runs.endpoint, runs.endpostcode, run_user.completed, run_user.sticky, run_user.last_tested, run_user.difficulty FROM runs LEFT JOIN run_user ON run_user.run_id=runs.id AND run_user.user_id = ''2''

¿Alguna sugerencia de cómo hacer esto a través del Generador de consultas? Puedo hacer el IZQUIERDA ÚNICA en Laravel 4 pero no puedo imaginar cómo combinar esto con una declaración AND también.

Cualquier ayuda es apreciada.

¡Gracias!


Aquí hay que trabajar:

DB::table(''runs'') ->leftJoin(''run_user'', function($join) use ($user_id) { $join->on(''run_user.run_id'', ''='', ''runs.id'') ->where(''run_user.user_id'', ''='', $user_id); }) ->get();


Como solicitó, esta es la forma en que haría su consulta con el generador de consultas:

DB::table(''runs'') ->leftJoin(''run_user'', function($join) { $join->on(''run_user.run_id'', ''='', ''runs.id'') ->on(''run_user.user_id'', ''='', ''2''); }) ->get();

Pero esa declaración de JOIN parece un poco rara, probablemente desee convertir eso en un WHERE normal (a menos que tenga una razón muy específica para filtrar directamente en la cláusula de JOIN).

DB::table(''runs'')->join(''run_user'', ''run_user.run_id'', ''='', ''runs.id'')->where(''run_user.user_id'', ''='', ''2'')->get();

Docs: http://laravel.com/docs/queries#joins


En Laravel 4 puedes hacer esto usando la consulta de Eloquent. Supongo que usted es consciente de las relaciones elocuentes y sabe cómo crear modelos. Para su consulta debe ser

RunUser::where(''user_id'',$id)->leftjoin(''runs'',''runs.id'',''='',''run_user.run_id'')->first();

Nota RunUser es el modelo para la tabla run_user.


En caso de que alguien se esté preguntando, obtuve este trabajo usando DB :: raw en uno de los parámetros leftJoin:

DB::table(''runs'') ->leftjoin(''run_user'', ''runs.id'',''='', DB::raw(''run_user.run_id AND run_user.user_id = '' . $user->id)) ->get();

No es tan ''elocuente'' como me gustaría que fuera, pero sin una condición de "funcionamiento y funcionamiento" parece ser la única forma si desea agregar un AND a la IZQUIERDA.

Si alguien puede sugerir una manera más ordenada me encantaría saber!

Gracias


Unirse a la tabla de usuarios y usuarios y obtener una identificación con todos los detalles.

$return = DB::table(config::get(''databaseconstants.TBL_USER'')) ->leftjoin(''inex_pf_details'', ''inex_users.id'', ''='', ''inex_pf_details.pf_user_id'') ->select(''inex_pf_details.*'',''inex_users.*'') ->where(''inex_pf_details.id'', $id) ->first(); return $return;


utilizar esta

DB::table(''runs'')->select(''runs.startpoint'',''runs.startpostcode'',''runs.endpoint'',''runs.endpostcode'',''run_user.completed'',''run_user.sticky'',''run_user.last_tested'',''run_user.difficulty'') ->leftJoin(''run_user'', function($join) { $join->on(''run_user.run_id'', ''='', ''runs.id'') ->where(''run_user.user_id'', ''2''); }) ->get();