Я использую перетаскивание на интерфейс, который вызывает API Laravel (5.3) для обновления базы данных. Это работает хорошо, за исключением того, что я заметил, что этот метод также изменяет id
этого предмета. Некоторые из моих других сортируемых моделей используют полиморфные отношения, которые нарушаются, когда я использую код ниже.
public function sort(SocialMediaItemRequest $request)
{
$icons = Auth::user()->socialmediaicons;
$icons->each(function ($icon, $index) use ($request) {
$icon->update($request->icons[$index], ['list_order' => $icon->list_order]);
});
return fractal()->collection($icons, new SocialMediaIconsTransformer())->toArray();
}
Я тоже пробовал
$icons->each(function ($icon) use ($request) {
$icon->update(['order' => $request->order]);
});
Но это тоже не работает. Все, что я хочу, так это изменить list_order
поля, связанные с user_id
,
Это работает. Но я открыт для других предложений:
public function sort(SocialMediaItemRequest $request)
{
foreach (($request->icons) as $icon => $id) {
SocialMediaIcon::where('id', $id)->update([
'list_order' => $icon + 1
]);
}
$icons = Auth::user()->socialmediaicons;
return fractal()->collection($icons, new SocialMediaIconsTransformer())->toArray();
}
Мне помогли Reddit и это последнее решение, которое я использую:
public function sort(Request $request)
{
foreach ($request->icons as $icon) {
SocialMediaIcon::where('id', $icon['id'])->update(['list_order' => $icon['list_order']]);
}
return fractal()->collection(Auth::user()->socialmediaicons, new SocialMediaIconsTransformer())->toArray();
}