Skip to content

Instantly share code, notes, and snippets.

@relliv
Created January 4, 2023 09:04
Show Gist options
  • Save relliv/1ccdbc2ba2320b5ef5892dc1591f3624 to your computer and use it in GitHub Desktop.
Save relliv/1ccdbc2ba2320b5ef5892dc1591f3624 to your computer and use it in GitHub Desktop.
Reorder between two records
<?php
...
public function switchRows(UpdateProductRowsRequest $request): JsonResponse
{
$input = $request->validated();
$sourceItem = $this->baseRepository->find($input['sourceId']);
if (empty($sourceItem)) {
$this->setResponseMessage('not_found');
return $this->sendError($this->responseMessage);
}
$targetItem = $this->baseRepository->find($input['targetId']);
if (empty($targetItem)) {
$this->setResponseMessage('not_found');
return $this->sendError($this->responseMessage);
}
$sourceRowNumber = $sourceItem->row_order;
$targetRowNumber = $targetItem->row_order;
$rows = $this->baseRepository->makeModel()
->whereBetween('row_order', [$targetRowNumber, $sourceRowNumber])
->orWhereBetween('row_order', [$sourceRowNumber, $targetRowNumber])
->where('is_draft', true)
->orderBy('row_order', 'asc')
->get()
->sortBy(function ($row) {
return $row->row_order;
}, SORT_NUMERIC);
if (count($rows) === 2) {
$sourceItem->row_order = $targetRowNumber;
$targetItem->row_order = $sourceRowNumber;
$sourceItem->save();
$targetItem->save();
} elseif (count($rows) > 2) {
foreach ($rows as $row) {
if ($row->id === $sourceItem->id) {
$row->row_order = $targetItem->row_order;
} else {
$row->row_order = $sourceRowNumber > $targetRowNumber
? $row->row_order + 1 // 8 -> 5
: $row->row_order - 1; // 5 -> 8
}
$row->save();
}
}
$this->setresponseMessage('', 'Ürün sıralaması güncellendi', true);
return $this->sendSuccess($this->responseMessage);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment