Как обновить таблицу, связывающая две таблицы?
Есть таблицы категорий (categories), марок (marks) и связывающая таблица (category_mark).
Не получается обновлять записи в таблице category_mark
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('alias')->nullable();
$table->string('description')->nullable();
$table->boolean('status')->default(true);
$table->timestamps();
});
Schema::create('marks', function (Blueprint $table) {
$table->id();
$table->string('name',50);
$table->string('alias',50)->nullable();
$table->boolean('status')->default(true);
$table->timestamps();
});
Schema::create('category_mark', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('category_id');
$table->unsignedBigInteger('mark_id');
$table->foreign('category_id')->references('id')->on('categories')
->onDelete('cascade')
->onUpdate('cascade');
$table->foreign('mark_id')->references('id')->on('marks')
->onDelete('cascade')
->onUpdate('cascade');
});
Model
class Category extends Model {
protected $fillable = ['name','alias','description'];
public function marks(){
return $this->belongsToMany('App\Models\Mark');
}
}
форма
<input class="form-control" name="name" type="text" value="Toyota">
<select name="mark_id[]" class="duallistbox" multiple="multiple">
@foreach($marks as $mark)
<option value="{{ $mark->id }}"
{{ isset($category)?($category->marks->find($mark)? 'selected' : ''):'' }}>{{ $mark->name }}</option>
@endforeach
</select>
controller
public function update(Request $request, Category $category) {
$category->update([
'name' => $request->name,
'alias' => !empty($request->alias)? $request->alias: Str::slug($request->name),
'description' => $request->description,
]);
foreach($request->mark_id as $mark){
$category->marks()->updateExistingPivot($category->id, ['mark_id' => $mark]);
}
return redirect()->back()->withInput();
}
в результате в таблице category_mark ничего не меняется.
Получается нужно проверять старое значение mark_id с новым в таблице category_mark ?
Если использовать метод sync, то старая запись стирается, и добавляется новая в таблице category_mark вместе с category_id и mark_id,
а нужно обновить старую запись
$category->marks()->sync($request->mark_id);
подскажите, как это сделать?