DEV Community

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

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

arielmejiadev profile image Ariel Mejia Updated on ・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 (0)

Forem Open with the Forem app