laravel 5.5雄辩的查询生成器在存储带有查询字符串的URL时生成错误的查询

时间:2019-01-07 08:13:05

标签: php mysql laravel

我有一个雄辩的模型,其中包含urldata以及其他标准laravel字段。

然后我这样做:

        $cache = new \App\Cache();
        $cache->url = $this->url;
        $cache->data = json_encode($data);
        $cache->save();

url没有查询字符串时,它可以正常工作,但是当url有查询字符串时,laravel生成错误的查询,例如:

原始数据:

$this->url = 'https://some-url.com?param1=val1&param2=val2';
$data = ['some' => 'long', 'json' => 'data'];

转到:

insert into `cache` (`url`, `data`, `updated_at`, `created_at`) 
values (
    https://some-url.com{"some":"long","json":"data"}param1=val1&param2=val2, 
    2019-01-07 07:38:15, 
    ?, 
    ?
)

如您所见,编码的json放在错误的位置(在查询字符串的?上)

我做错了什么?还是这是一个错误?

注意:我正在使用mysql

更新:删除了错误字符串,因为它分散了主要问题的注意力

4 个答案:

答案 0 :(得分:1)

我相信您需要像在DB中那样存储URL

$url_string = $this->url;
$cache->url = '{$url_string}';

适用于网址

答案 1 :(得分:0)

我认为您应该将url类型转换为字符串,然后将其保存或使用应该可以使用的标准create()方法。我已经在一个项目中使用了它,没有问题。

答案 2 :(得分:0)

您可以使用urlencode()函数。 尝试使用编码保存您的网址。

$cache->url = urlencode($this->url);

,稍后您可以使用urldecode()函数获取它。

答案 3 :(得分:0)

在sql记录器上发现一个错误,该错误会生成错误的sql snipet。主要错误只是字段长度不符合@ Sohel0415建议的数据长度。

所以记录器误导了我,认为生成的查询是错误的。