我在使用value($column)时有一个奇怪的Laravel行为,并且使用了雄辩的查询
你好,我有一个雄辩的疑问:
$qr_id = Qr::where('qr_hash_id', '=', 'lb4jlzm5')->first();输出是正确的:
dd($qr_id);
.
.
.....
#escapeWhenCastingToString: false
#attributes: array:12 [
"id" => 44
"qr_hash_id" => "lb4jlzm5"
.....
.
.现在,如果我想得到ID列,通常我们会这样做
$qr_id = Qr::where('qr_hash_id', '=', 'lb4jlzm5')->first()->value('id');我应该期望id值"44“。
但是返回的值是43。
qr_hash_id排序是utf8_bin
如果我这么做
$qr_id = Qr::where('qr_hash_id', '=', 'lb4jlzm5')->first()->id;没有值(),我就得到了正确的值。
这里少了什么?控件的SQL语句。
Qr::where('qr_hash_id', '=', 'lb4jlzm5')->first()因为
Qr::where('qr_hash_id', '=', $request->input('qr_hash_id'))->first()->toSql();返回
"select * from `qrs`"没有地方条件也没有限制。
发布于 2022-11-03 12:49:24
作为@lagbox回答
value是一个查询生成器方法,它不是一个模型的方法。您正在重新查询数据库,并为查询的第一条记录获取该列的值.
使用它的方法是Qr::where(...)->value('id');
在第二个问题中,您已经执行了第一个查询,它添加了约束并执行了查询.在此之后调用toSql与调用全新查询生成器.的调用相同。
https://stackoverflow.com/questions/74296918
复制相似问题