Laravel, обнови все отношения при удалении записи

У меня есть две модели, Position а также User, У них есть One to many отношения между ними.

Когда я удаляю позицию, я хочу, чтобы все связанные пользователи были отсоединены от этой позиции и прикреплены к другой (найденной по id).

Я уверен, что это достаточно просто, но я попытался сделать это в foreach кругом, без успеха:

public function postDelete($position)
{
$positionMembers = $position->users()->get();

foreach ($positionMembers as $member) {
$member->position_id = '4';

// fixed copy/paste var name error
$member->save()
}

// Was the position deleted?
if($position->delete()) {
// Redirect to the position management page
return Redirect::to('admin/positions')->with('success', Lang::get('admin/positions/messages.delete.success'));
}

// There was a problem deleting the position
return Redirect::to('admin/positions')->with('error', Lang::get('admin/positions/messages.delete.error'));
}

Я также попробовал:

$member->position()->associate($this->position->find(4));

но это тоже не работает. Поле position_id всегда остается неизменным. Есть ли более рекомендуемый способ?

0

Решение

Сначала определите безуспешно, потому что он ничего не говорит, и код, который вы показываете, должен работать.

Во всяком случае, я бы предложил другой подход, для использования Eloquent save в цикле не лучший способ:

public function postDelete($position)
{
DB::transaction(function () use ($position, &$deleted) {

// run single query for update
$position->users()->update(['position_id' => 4]);

// run another query for delete
$deleted = $position->delete();
});

// Was the position deleted?
if($deleted) {
// Redirect to the position management page
return Redirect::to('admin/positions')->with('success', Lang::get('admin/positions/messages.delete.success'));
}

// There was a problem deleting the position
return Redirect::to('admin/positions')->with('error', Lang::get('admin/positions/messages.delete.error'));
}

С этим вы убедитесь, users не обновляться, если при удалении произошла ошибка (исключение) position и вы выполняете 2 запроса, независимо от того, сколько users Есть, чтобы обновить.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]