Estoy tratando de cambiar la lógica de Laravel Jetstream para unirme a un equipo predeterminado en el registro en lugar de crear un equipo personal. Encontré el método que hace esto:
public function create(array $input) { Validator::make($input, [ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => $this->passwordRules(), 'terms' => Jetstream::hasTermsAndPrivacyPolicyFeature() ? ['required', 'accepted'] : '', ])->validate(); return DB::transaction(function () use ($input) { return tap(User::create([ 'name' => $input['name'], 'email' => $input['email'], 'password' => Hash::make($input['password']), ]), function (User $user) { $user->currentTeam = Team::find(1); # SQLSTATE[42S22]: Column not found: 1054 Unknown column 'currentTeam' in 'field list' $user->save(); }); }); } El problema aquí es que currentTeam parece haber sido creado después del nivel de la base de datos y no una columna en la base de datos en sí. La documentación dice que currentTeam devuelve el modelo Team pero no dice cómo actualizar el equipo de usuarios actual mediante programación.
Puedo ver que puedo usar manualmente una consulta DB para insertar una fila en la tabla team_user pero debe haber un método para hacerlo.
return DB::transaction(function () use ($input) { return tap(User::create([ 'name' => $input['name'], 'email' => $input['email'], 'password' => Hash::make($input['password']), ]), function (User $user) { DB::table('team_user')->insert(['user_id' => $user->id, 'team_id' => 1, 'role' => 'rfn']); $user->current_team_id = 1; }); });Cualquier ayuda sería apreciada, entiendo que esto dependerá de este equipo que siempre existe en la base de datos, pero se implementarán más medidas para que no se pueda eliminar.
Después de algunos retoques con una versión local de Laravel, se me ocurrió esto. Esto supone que el equipo al que desea agregar el usuario ya se creó de alguna manera, posiblemente a través de una sembradora o se creó manualmente. El archivo que necesita editar es app/Actions/Fortify/CreateNewUser.php , es decir, el método createTeam .
En lugar de crear un nuevo equipo, queremos tomar un equipo de la base de datos, adjuntarlo al usuario recién registrado y luego convertir ese equipo ahora adjunto en el equipo actual de los usuarios.
protected function createTeam(User $user) { $team = Team::first(); $user->teams()->attach($team); $user->switchTeam($team); } La razón por la que primero debemos adjuntar el equipo es que switchTeam verifica si un usuario pertenece a ese equipo; si no, devuelve falso y no cambia al nuevo equipo. Al adjuntar el equipo primero, hacemos que el usuario pertenezca a ese equipo antes de que podamos cambiarlo como el equipo actual.
también puede asignar un rol en la respuesta anterior de @KimHallberg como se muestra a continuación
$team = Team::first(); $user->teams()->attach($team, array('role' => 'editor')); $user->switchTeam($team);