loading...
Cover image for Evita la excepción "Ambiguous Column"  en Eloquent.

Evita la excepción "Ambiguous Column" en Eloquent.

arielmejiadev profile image arielmejiadev ・1 min read

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);
}
Enter fullscreen mode Exit fullscreen mode

Team

public function users()
{
    return $this->belongsToMany(User::class);
}
Enter fullscreen mode Exit fullscreen mode

Ahora puedes hacer un "attach" de los teams:

Team::users()->attach(auth()->user());
Enter fullscreen mode Exit fullscreen mode

y obtener la colección de usuarios por equipo:

$users = Team::users;
Enter fullscreen mode Exit fullscreen mode

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();
Enter fullscreen mode Exit fullscreen mode

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();
Enter fullscreen mode Exit fullscreen mode

La misma idea aplica cuando deseas usar un metodo "where":

Team::users()->where('users.email', $request->get('email'))->get();
Enter fullscreen mode Exit fullscreen mode

Discussion

pic
Editor guide