需要重新排序 sort_column Yii2
Need reorder sort_column Yii2
我需要重新排序列 sort_order
。
就是,select分配类别的位置和
重新计算 table.
例如,如果我 select 类别 3,则在下一个插入并重新排序 sort_order。
我试过这段代码,但有问题:
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']);
}
如何重新排序此列?
感谢您的帮助。
public function actionUp($id, $newPosition=null) {
$model = Category::findOne($id);
if(!$model)
throw new UserException('We were unable to find a matching record');
$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;
If($newPosition)
$model->sortOrder = $newPosition;
else
$model->sort_order = $prevOrder;
$prev->sort_order = $currentOrder;
$model->save();
$prev->save();
return $this->redirect(['index']);
}
我有这个,在分类服务中
public 函数 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,它是空的,它给出了错误。
我还有一个问题,它怎么能做同样的事情,但是,在创建时选择放置它的位置?
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.
我需要重新排序列 sort_order
。
就是,select分配类别的位置和
重新计算 table.
例如,如果我 select 类别 3,则在下一个插入并重新排序 sort_order。
我试过这段代码,但有问题:
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']);
}
如何重新排序此列? 感谢您的帮助。
public function actionUp($id, $newPosition=null) {
$model = Category::findOne($id);
if(!$model)
throw new UserException('We were unable to find a matching record');
$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;
If($newPosition)
$model->sortOrder = $newPosition;
else
$model->sort_order = $prevOrder;
$prev->sort_order = $currentOrder;
$model->save();
$prev->save();
return $this->redirect(['index']);
}
我有这个,在分类服务中 public 函数 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,它是空的,它给出了错误。
我还有一个问题,它怎么能做同样的事情,但是,在创建时选择放置它的位置?
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.