Php 将值绑定到DB::raw以进行更新
我想将值绑定到Php 将值绑定到DB::raw以进行更新,php,laravel,pdo,eloquent,Php,Laravel,Pdo,Eloquent,我想将值绑定到DB::raw(…)查询部分,但只用于更新,因此我既不想select(DB::raw(“…”),[…])也不想whereRaw(“…”,[…])也不想setBindings([…]) 例如,我希望能够将值绑定到以下DB::raw: $user = User::find(3); $newCoordinates = ['coordinates' => DB::raw("GeomFromText('POINT(:lat :lng)')")]; $user->update($n
DB::raw(…)
查询部分,但只用于更新,因此我既不想select(DB::raw(“…”),[…])
也不想whereRaw(“…”,[…])
也不想setBindings([…])
例如,我希望能够将值绑定到以下DB::raw
:
$user = User::find(3);
$newCoordinates = ['coordinates' => DB::raw("GeomFromText('POINT(:lat :lng)')")];
$user->update($newCoordinates);
如果对update()
函数不起作用,是否有办法对save()
函数起作用
谢谢您的帮助。不是很优雅,但它可以:
$user = User::find(3);
$newCoordinates = ['coordinates' => DB::raw("GeomFromText('POINT(?, ?)')")];
$user->newQuery()->setBindings([$lat, $lng], 'join')
->whereKey($user->id)->update($newCoordinates);
如果你想更新更多的属性,你必须在
'coordinates'
之后添加它们。你可以手动添加绑定,但是在浮点和整数的情况下,我就不麻烦了。只需将*lat和lng转换为一个float,并将它们直接插入原始表达式。@Devon您可能是对的,我已经有了检查坐标的验证规则(required | numeric | min:-85 | max:85
表示纬度,required | numeric | min:-180 | max:180
)我甚至把整个代码放在一个try/catch块中。你是否使用/需要在timestamp更新的u?@JonasStaudenmeir是的,但我更改了它的名称。我假设您会告诉我检索PDO实例并使用它?您写下您不想要setBindings()
:您不想使用它(为什么?),还是您认为您不能使用它?