У меня есть две модели, Пользователь и Сервис, с отношением ManyToMany . Сводная таблица имеет два дополнительных поля, id_code
и alias
. Между Пользователем и Сервисом может быть много связей, но каждая из них уникально идентифицируется полем id_code
. Мне нужно получить конкретную запись в сводной таблице по id_code
и обновить alias
только для этой записи.
Мои модели:
Пользователь:
class User extends Authenticatable
{
//All attributes & other functions here...
public function linked_services(){
return $this->belongsToMany(Service::class)
->withPivot('alias', 'id_code')
->withTimestamps();
}
}
Услуги:
class Service extends Model
{
//All attributes & other functions here...
public function linked_users(){
return $this->belongsToMany(User::class)
->withPivot('alias', 'id_code')
->withTimestamps();
}
}
Миграция пользователя службы:
Schema::create('service_user', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id')->nullable();
$table->unsignedBigInteger('service_id');
$table->string('alias', 50)->nullable();
$table->string('id_code', 50);
$table->foreign('user_id')->references('id')->on('users');
$table->foreign('service_id')->references('id')->on('services');
$table->timestamps();
});
В функции обновления я получаю конкретный $ id_code из представления, но я не знаю, как обновить «псевдоним» для этого конкретного «id_code».
Что я уже пробовал и не работает:
public function update(Request $request, String $id_code){
foreach(Auth::user()->linked_services as $service){
if($service->pivot->id_code === $id_code){
$service->pivot->alias = $request->alias;
$service->pivot->save();
}
}
return redirect()->route('services_user.index');
}
Эта функция обновляет ВСЕ существующие сводные записи для service_user, мне нужно обновить только конкретную запись для данного "id_code".