Метод updateExistingPivot
Метод updateExistingPivot применяется к экземпляру отношения BelongsToMany и позволяет обновить данные в промежуточной таблице для существующей связи между двумя моделями. Первым параметром передаётся идентификатор связанной модели, вторым - массив с данными для обновления в pivot-таблице. Метод возвращает true в случае успеха или false при неудаче.
Синтаксис
<?php
$model->relation()->updateExistingPivot($relatedId, $attributes);
?>
Пример
Давайте обновим поле 'role' в промежуточной таблице для пользователя с идентификатором 1 в проекте с идентификатором 1:
<?php
use AppModelsProject;
use AppModelsUser;
$project = Project::find(1);
$user = User::find(1);
$res = $project->users()->updateExistingPivot($user->id, ['role' => 'manager']);
echo $res;
?>
Результат выполнения кода:
true
Пример
Давайте обновим несколько полей одновременно в промежуточной таблице для курса и студента:
<?php
use AppModelsCourse;
use AppModelsStudent;
$course = Course::find(1);
$student = Student::find(1);
$res = $course->students()->updateExistingPivot($student->id, [
'grade' => 5,
'status' => 'completed',
'feedback' => 'Excellent work'
]);
echo $res;
?>
Результат выполнения кода:
true
Пример
Попробуем обновить запись, которая не существует в промежуточной таблице:
<?php
use AppModelsPost;
use AppModelsTag;
$post = Post::find(1);
$tag = Tag::find(99);
$res = $post->tags()->updateExistingPivot($tag->id, ['order' => 1]);
echo $res;
?>
Результат выполнения кода:
false
Пример
Обновим поле 'quantity' в промежуточной таблице для заказа и товара, используя Timestamp для отслеживания изменений:
<?php
use AppModelsOrder;
use AppModelsProduct;
use CarbonCarbon;
$order = Order::find(1);
$product = Product::find(1);
$res = $order->products()->updateExistingPivot($product->id, [
'quantity' => 5,
'updated_at' => Carbon::now()
]);
if ($res) {
echo "Pivot updated successfully";
} else {
echo "Pivot update failed";
}
?>
Результат выполнения кода:
"Pivot updated successfully"