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




laravel-4 eloquent (4)

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

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!


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 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;




eloquent