Нужно изменить порядок sort_column Yii2 - PullRequest
0 голосов
/ 22 октября 2019

Мне нужно изменить порядок столбцов sort_order. Это, выберите позицию, в которой нужно выделить категорию, и пересчитайте таблицу.

Например, если я выберу категорию 3, вставьте в следующую и измените порядок сортировки.

Я пробовал этот код, но что-тонеправильно:

       public function actionUp($id) {
               $model = $this->loadModel($id);

                $prev = Category::find()
                ->andWhere(['<', 'sort_order', $model->sort_order])
                ->orderBy(['sort_order' => SORT_DESC])
                ->limit(1)->one();

                $current = $model->sort_order;
                $model->sort_order = $prev->sort_order;
                $prev->sort_order = $current->sort_order;

                $model->save();
                $prev->save();
                return $
        this->redirect(['index']);
       }

Как я могу изменить порядок этой колонки? Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 24 октября 2019
actionUp and Down work well, thank you very much 

And when I'm going to add a new category, how can I indicate the position, based o parent_id?

public function create(CategoryCreateForm $form): Category
    {
        $channel = Category::create(
            $form->parentId,
            $form->name,
            $form->code,
            $form->description
        );

        $category = $this->categories->get($form->parentId);

        $next = Category::find()
            ->andWhere(['<', 'sort_order', $category->sort_order])
            ->orderBy(['sort_order' => SORT_DESC])
            ->limit(1)->one();

        if ($next)
            $nexOrder = $next->sort_order;
        else
            $nexOrder = 0;
        $currentOrder = $category->parent_id;
        if ($newPosition)
            $category->parent_id =$newPosition;
        else
             $category->parent_id = $nexOrder;
        $next->sort_order = $currentOrder;

        $prev->save();
        $this->categories->save($category);
        return $category;

    }

It does not work this way, what is wrong.
0 голосов
/ 23 октября 2019

У меня есть это, в публичной функции Categoryservice moveUp ($ id) {

$model = $this->categories->get($id);

        $prev = Category::find()
            ->andWhere(['<', 'sort_order', $model->sort_order])
            ->orderBy(['sort_order' => SORT_DESC])
            ->limit(1)->one();

        if($prev)
            $prevOrder = $prev->sort_order;
        else
            $prevOrder = 0;

        $currentOrder = $model->sort_order;
        $model->sort_order = $prevOrder;
        $prev->sort_order = $currentOrder;


        $prev->save();
        $this->categories->save($model);
}

Вы были правы, в одной из категорий не было sort_order, оно было нулевым и выдало ошибку.

У меня есть еще один вопрос, как он может сделать то же самое, но при создании выбрать, где его разместить?

...