【问题标题】:Reorder associated models laravel重新排序关联模型 laravel
【发布时间】:2017-02-20 14:27:16
【问题描述】:

在我的数据库中,我有一个项目表,按数字“位置”列排序。每个位置都是唯一的,它们定义了数据的显示方式(例如,首先显示 1,最后显示 10)。

我正在尝试编写一个控制器,它可以让我做两件关键的事情:

首先,我需要能够将任何项目向上或向下移动一个位置(显然,如果它已经在开头或结尾,则不能分别向上或向下移动)。

其次,我希望能够使用拖放界面重新排序项目。我找到了这样的接口,但我不知道如何使用。

如果您曾经成功地为表格实现了重新排序功能,无论是使用拖放还是“向上”和“向下”按钮,请帮助我!事实证明这非常非常复杂,但它对我的网站非常重要。我不是 Laravel 的新手,只是我低估了这样做的难度!

【问题讨论】:

  • 对于 UI,您倾向于哪个库?你已经使用jQuery了吗?他们有一个很好的sortable 库,其中包含callbacks(如changestart 等),您可以使用这些数据来更新数据库。
  • 我的回答对你有帮助吗?

标签: javascript php mysql laravel laravel-5


【解决方案1】:

我刚刚解决了完全相同的问题。我将撕毁我的处理方式。

对于客户端,我使用了this 库。

Javascript:

$( document ).ready(function() {
        $("#table-categories").rowSorter({
            onDrop: function(tbody, row, new_index, old_index) {
                $.post("/path/to/api/priority", {old_index: old_index + 1, new_index: new_index + 1, _token: "<?php echo csrf_token(); ?>" }, function(result){
                    console.log('server result: ' + result);
                });
            },
        });
    });

注意 old_indexnew_index 上的 +1,因为我没有覆盖 rowsorter 库上的行索引,但我的模型上的 priority 索引从 1 开始,而不是 0。如果你从 0 开始,只需按原样发送索引即可。

服务器端(Laravel 控制器):

public function priority()
{
    $old = \Input::get('old_index');
    $new = \Input::get('new_index');

    foreach (\App\Category::all() as $category) 
    {
        if ($category->priority == $old) 
        {
            $category->priority = $new;
            $category->save();
        }
        else
        {
            if ($old < $new) 
            {
                if ($category->priority <= $new AND $category->priority >= $old) 
                {
                    $category->priority -= 1;
                    $category->save();
                }
            }
            else
            {
                if ($category->priority <= $old AND $category->priority >= $new) 
                {
                    $category->priority += 1;
                    $category->save();
                }
            }
        }
    }

    return 'OK';
}

注意:此逻辑唯一缺少的实现是处理从表中插入或删除行时的优先级,请记住实现它们。如果您在执行此操作时遇到问题,请告诉我,以便我添加实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2021-10-02
    • 1970-01-01
    相关资源
    最近更新 更多