Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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
Jquery 当响应为json时,Laravel响应ID会更改,但当转储数据时,ID就在那里_Jquery_Json_Ajax_Laravel_Jquery Select2 - Fatal编程技术网

Jquery 当响应为json时,Laravel响应ID会更改,但当转储数据时,ID就在那里

Jquery 当响应为json时,Laravel响应ID会更改,但当转储数据时,ID就在那里,jquery,json,ajax,laravel,jquery-select2,Jquery,Json,Ajax,Laravel,Jquery Select2,我试图在Laravel中使用ajax请求,它根据select2输入搜索记录。现在,我在获取数据后转换数据,只是为了加密ID。下面是我获取记录并将其ID转换为加密的方法 public function autocompletePedigree($subdomain, $type = null) { $q = request()->get('q'); $sex = NULL; if (!is_null($type)) {

我试图在Laravel中使用ajax请求,它根据select2输入搜索记录。现在,我在获取数据后转换数据,只是为了加密ID。下面是我获取记录并将其ID转换为加密的方法

    public function autocompletePedigree($subdomain, $type = null)
    {

        $q = request()->get('q');

        $sex = NULL;
        if (!is_null($type)) {
            $sex = $this->sexesRepository->make()->where('name', $type)->first(['id'])->id;
        }

        $results = $this->dogsRepository->search($q, $sex);

        $results->getCollection()->transform(function ($value) {
            $value->id = encrypt($value->id);
            return $value;
        });

        return $results;
    }
现在,结果包含一个狗名和id,当我使用
dd($results)
时,id会被转换并更正,下面是一个示例

#attributes: array:2 [▼
  "id" => "eyJpdiI6IlN5YXdzT3hReEc2bnczRGM5YzV1eGc9PSIsInZhbHVlIjoiZ0NpaTRGWjNmS1ZEQjVZcGFZeWJRdz09IiwibWFjIjoiMThmNmQ5YmE5ZDI1MDg4OTZhMmExMTlmNzM0ZGU3ZDRhNzg0OGFhNzM2OTViYzVkN2QxZTUzMzMwMWY4ZDdhYiJ9"
  "text" => "Dog name"
]
但是当我使用
return response()->JSON($results)
切换到JSON时,它会返回

"data":[
  {
    "id":0,
    "text":"Dog name"
  },
  {
    "id":0,
    "text":"Doggy name"
  }

我不明白为什么它会将ID变为0。这是某种JSON清理过程吗?有人能帮我把加密的ID保存在JSON响应中吗?

经过一点挖掘,我发现它被自动转换成整数,这引起了一点骚动。因此,我通过添加
public$incrementing=false解决了这个问题
模型

经过一点挖掘,我发现它被自动转换成整数,这引起了一点骚动。因此,我通过添加
public$incrementing=false解决了这个问题
模型

对于其他好奇(比如我)为什么会发生这种情况的人:

他正在更改模型主键的类型。当他(或者在本例中是
JsonResponse
)调用模型上的
toJson()
时,它尝试将主键(手动更改为
string
)转换回其原始值(
int
),因为
(int)“eyJpdiI6IlN…”
等于
0
他的键也是
0

发生这种情况是因为主键实际上是模型的:

public function getCasts()
{
    if ($this->getIncrementing()) {
        return array_merge([$this->getKeyName() => $this->getKeyType()], $this->casts);
    }

    return $this->casts;
}

。。。当模型被序列化为数组(后来又被转换为JSON)时,属性就会被转换。

对于其他好奇(比如我)为什么会发生这种情况的人:

他正在更改模型主键的类型。当他(或者在本例中是
JsonResponse
)调用模型上的
toJson()
时,它尝试将主键(手动更改为
string
)转换回其原始值(
int
),因为
(int)“eyJpdiI6IlN…”
等于
0
他的键也是
0

发生这种情况是因为主键实际上是模型的:

public function getCasts()
{
    if ($this->getIncrementing()) {
        return array_merge([$this->getKeyName() => $this->getKeyType()], $this->casts);
    }

    return $this->casts;
}

。。。当模型被序列化为数组(稍后再转换为JSON)时,属性被强制转换。

你也可以共享模型吗?@petersowah我可以向你保证,模型和其他一切都是正确的。只有当我尝试切换到jsonShare模型时才会发生这种情况,拜托,你似乎有一些规则如何转换到jsonJust添加了整个模型添加了这个模型并将其扩展到了可以共享模型吗?@petersowah模型和其他一切都是正确的,我可以向你保证。这只发生在我尝试切换到jsonShare模型时,请注意,您似乎有一些规则如何转换为jsonJust添加了整个模型添加了该模型并对其进行了扩展