Escenario: tienes dos modelos con relaciones y deseas obtener algunas columnas de la relación.
Modelos:
User:
public function teams()
{
return $this->belongsToMany(Team::class);
}
Team
public function users()
{
return $this->belongsToMany(User::class);
}
Ahora puedes hacer un "attach" de los teams:
Team::users()->attach(auth()->user());
y obtener la colección de usuarios por equipo:
$users = Team::users;
Ok en este punto todo esta bien, es posible que pases datos por una API o a una vista pero tu modelo User sea muy amplio o tenga datos sensibles que no deseas que sean publicos.
posiblemente deseas mostrar solo el nombre y el email de los usuarios de cierto equipo:
$team = Team::first();
$team->users()->select(['name', 'email'])->get();
En este punto tendras una excepción de eloquent, esto es porque el modelo User puede tener una columna que se llame "name" y el modelo Team tambien, esto es facil de evitar pasandole explicitamente el nombre de la tabla y la columna esperada.
Team::users()->select(['users.name', 'users.email'])->get();
La misma idea aplica cuando deseas usar un metodo "where":
Team::users()->where('users.email', $request->get('email'))->get();
Top comments (0)