Логика заказа товаров с помощью Laravel - PullRequest
0 голосов
/ 16 февраля 2019

Для моего Laravel-приложения я реализовал функцию сортировки.В списке опций я показываю две кнопки (вверх и вниз), которые запускают функции вверх и вниз в OptionController (см. Ниже).

Вопрос 1

В данный момент я просто использую поле DECIMAL (30,15) для столбца сортировки в базе данных.Я выбираю это 30,15 случайно.Можете ли вы дать мне совет, какой DECIMAL (?,?) Лучше всего подходит для этого поля сортировки?

Вопрос 2

Я хочу переместить up иdown логика для места, где я могу использовать его в разных контроллерах с общими моделями (например, Sort::up($models, $item).Каково было бы правильное место для размещения такой логики?Обслуживание?Helper-функция?...?

Вопрос 3

Когда я создаю новый элемент (например, опция в моем примере ниже), мне нужно автоматически установить сортировку на сортировку последнего элемента + 1Конечно, я мог бы сделать это в контроллере при его сохранении, но могу ли я применить эту логику к самой модели?И: Где я могу поместить эту логику, чтобы использовать ее в более чем одной модели без повторения кода?

namespace App\Http\Controllers;


use App\Models\Option;
use App\Models\Attribute;

class OptionController extends Controller
{

    public function up($id, $attributeId) {
      $options = Attribute::findOrFail($attributeId)->options;
      $option = Option::findOrFail($id);

      foreach ($options as $index => $o) {

        // Search for the current position of the
        // option we have to move.
        if( $option->id == $o->id ) {

          // Will be first element?
          if( $index == 1) {

            // Set the sort to current first element sort - 1
            $option->sort = $options[0]->sort-1;

          } else if( $index > 1) {

            // Get the previous and the pre-previous items from the options
            $pre = $options[$index-1]->sort;
            $prepre = $options[$index-2]->sort;

            $diff = ($pre - $prepre) / 2;

            $option->sort = $prepre + $diff;
          }

          break;
        }
      }

      $option->save();

            Session::flash('message', __(':option moved up.', [ 'option' => $option->name ]));
      Session::flash('message-type', 'success');

      return redirect()->back();
    }

    public function down($id, $attributeId) {
      $options = Attribute::findOrFail($attributeId)->options;
      $option = Option::findOrFail($id);

      foreach ($options as $index => $o) {

        // Search for the current position of the
        // option we have to move.
        if( $option->id == $o->id ) {

          // Will be last element?
          if( $index == count($options)-2 ) {

            // Set the sort to current last element sort + 1
            $option->sort = $options[count($options)-1]->sort+1;

          } else if( $index < count($options)-2) { // ???

            // Get the previous and the pre-previous items from the options
            $next = $options[$index+1]->sort;
            $nextnext = $options[$index+2]->sort;

            $diff = ($nextnext - $next) / 2;

            $option->sort = $next + $diff;
          }

          break;
        }
      }

      $option->save();

      Session::flash('message', __(':option moved down.', [ 'option' => $option->name ]));
      Session::flash('message-type', 'success');

      return redirect()->back();
    }
}

1 Ответ

0 голосов
/ 17 февраля 2019

Вы можете использовать для этого черту.См. ссылка для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...