laravel5.5雄辩的查询生成器在用查询字符串存储url时生成错误的查询

eiee3dmh  于 2021-06-15  发布在  Mysql
关注(0)|答案(4)|浏览(356)

我有一个能言善辩的模特 url 以及 data ,以及其他标准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
更新:删除了错误字符串,因为它分散了对主要问题的注意力

yeotifhr

yeotifhr1#

我相信你需要在数据库中存储这样的网址

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

这将是工作的网址

ulmd4ohb

ulmd4ohb2#

可以使用urlencode()函数。尝试用编码保存url。

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

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

9bfwbjaz

9bfwbjaz3#

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

jyztefdp

jyztefdp4#

原来是sql记录器上的一个bug产生了错误的sql snipet。主要错误只是字段长度与@sohel0415建议的数据长度不符。
所以记录器误导我认为生成的查询是错误的。

相关问题