Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拉雷维尔。如何处理排序顺序列移位_Php_Laravel_Laravel 5.5_Laravel Eloquent - Fatal编程技术网

Php 拉雷维尔。如何处理排序顺序列移位

Php 拉雷维尔。如何处理排序顺序列移位,php,laravel,laravel-5.5,laravel-eloquent,Php,Laravel,Laravel 5.5,Laravel Eloquent,我有这样一个表,和表示它的SomeModel | id | name | sort_order | | --------------- | ---------------- | ---------------- | | 1 | A | 1 | | 2 | B | 2

我有这样一个表,和表示它的
SomeModel

| id              | name             | sort_order       |
| --------------- | ---------------- | ---------------- |
| 1               | A                | 1                |
| 2               | B                | 2                |
| 3               | C                | 3                |
| 4               | D                | 8                |
我正在为这个表实现一个API。插入相同值时如何正确处理列移位

例如:

我想保存这样一个对象:

{
    "name": "B2",
    "sort_order": 2
}
并收到这样一张表格:

| id              | name             | sort_order       |
| --------------- | ---------------- | ---------------- |
| 1               | A                | 1                |
| 5               | B2               | 2                |
| 2               | B                | 3                | <--- initially was 2
| 3               | C                | 4                | <--- initially was 3
| 4               | D                | 8                |
| id | name |排序||
| --------------- | ---------------- | ---------------- |
|1 | A | 1|
|5 | B2 | 2|
|2 | B | 3 |我会这样做:

use App\SomeModel;
use Illuminate\Http\Request;

public function insert_data(Request $request){  
    SomeModel::where("sort_order", ">=", $request->sort_order)->increment("sort_order");
    SomeModel::create($request->all());
}

由于您有一些模型,因此可以执行以下操作:

在您的
AppServiceProvider中

Event::listen("eloquent.inserting: ".SomeModel::class, function (SomeModel $model) {
      SomeModel::where("sort_order", ">=", $model->sort_order)
             ->update([ "sort_order" => \DB::raw("sort_order+1") ])
});
其思想是更新所有其他模型,使其排序顺序高于或等于插入的模型,并将其递增一。您可能希望执行类似的操作,包括删除事件来填补空白,或者更新事件来交换排序顺序

您可以(也应该)通过阅读


当然,您可以始终将sort_order列设置为unique,并创建一个DB触发器来检查排序顺序,这可能会更好,因为这是一个数据完整性问题

你能解释一下这个示例对象是什么意思吗?这是无效的json,重复键是这样的。
对象
不清楚,请清除您实际需要的内容?@btl@bharat不管怎样。php数组、php对象等等。我的问题不在于格式,而在于改变其他型号的排序顺序。关于“具有重复密钥的无效json”。很抱歉愚蠢的复制粘贴错误。