wherein tablas relacionadas obtener multiples mostrar datos consultas consultar anidadas php laravel laravel-4 eloquent

php - obtener - Laravel: devolver resultados de mĂșltiples tablas relacionadas utilizando elocuente



obtener datos de tablas relacionadas laravel (2)

Estoy usando Laravel 4 y, en particular, estoy buscando una respuesta que utilice un ORM elocuente.

Tengo una tabla de " tareas " que los contenedores un client_id y un user_id asignado a cada fila.

client_id se refiere a un cliente en una tabla de " clientes " y user_id se refiere a un usuario en una tabla de " usuarios ".

Lo que quiero hacer : mostrar todas las tareas y mostrar el nombre de " clientes " y " usuarios " first_name

Entonces el resultado se vería así en mi vista (blade):

@foreach($tasks as $task) <tr> <td>{{ $task->user->first_name }}</td> <td>{{ $task->client->name }}</td> <td>{{ $task->description }}</td> </tr> @endforeach

La vista de arriba escupe el nombre $ task-> client-> perfectamente bien, pero desafortunadamente muestra un "intento de obtener propiedad de no objeto" cuando agrego la línea $ task-> user-> first_name

Mi controlador se ve así:

$tasks = Task::with(array(''user'', ''client''))->get(); return View::make(''index'', compact(''tasks''));

Según entiendo, mis modelos también hacen la diferencia, por lo que mis modelos se ven así:

class Task extends Eloquent { protected $guarded = array(); public static $rules = array(); public function client() { return $this->belongsTo(''Client''); } public function user() { return $this->belongsTo(''User''); } }

Y:

class User extends Eloquent implements UserInterface, RemindableInterface { public function task() { return $this->hasMany(''Task''); } }

Y:

class Client extends Eloquent { public function projects(){ return $this->hasMany(''Project'', ''client_id''); } }

¿Alguna idea de cómo hacer que esto funcione? Me he estado rascando la cabeza por un tiempo, también tenga en cuenta que no soy un profesional de relaciones de bases de datos, por lo que cuanto más simple sea la explicación, mejor :)


Acabo de resolver esto y aprendí bastantes cosas. Lo que hice fue configurar una relación de muchos a muchos entre users y clients y creé una tabla dinámica para manejar la relación llamada tasks que también almacena la descripción para cada tarea.

Era demasiado escribir aquí, pero puedes ver mi código en http://paste.laravel.com/Fpv


Las relaciones muchas-a-muchas se pueden hacer así con Eloquent:

class User extends Eloquent implements UserInterface, RemindableInterface { public function client() { return $this->belongsToMany(''Client'', ''tasks'', ''client_id'')->withPivot(''description''); } }

y la relación inversa ...

class Client extends Eloquent { public function users() { return $this->belongsToMany(''User'', ''tasks'', ''user_id''); } }

No lo he probado, pero debería ser correcto.