【问题标题】:Bind values to DB::raw for UPDATE将值绑定到 DB::raw 以进行 UPDATE
【发布时间】:2018-11-17 09:02:54
【问题描述】:

我想将值绑定到 DB::raw(...) 查询部分,但仅用于 UPDATE,因此我既不想要 select(DB::raw('...'), [...]) 也不想要 whereRaw('...', [...])setBindings([...])

例如,我希望能够将值绑定到以下DB::raw

$user = User::find(3);
$newCoordinates = ['coordinates' => DB::raw("GeomFromText('POINT(:lat :lng)')")];
$user->update($newCoordinates);

如果 update() 函数不起作用,有没有办法为 save() 函数做呢?

感谢您的帮助。

【问题讨论】:

  • 您可以手动添加绑定,但对于浮点数和整数,我不会打扰。只需将* lat 和 lng 转换为浮点数并将它们直接插入到原始表达式中。
  • @Devon 你可能是对的,我已经有验证规则来检查坐标(required|numeric|min:-85|max:85 表示纬度,required|numeric|min:-180|max:180 表示经度),我什至将整个代码放在 try/catch 块中.
  • 您是否使用/需要updated_at 时间戳?
  • @JonasStaudenmeir 是的,但我改了名字。我假设您会告诉我检索 PDO 实例并使用它?
  • 你写你不要setBindings():你不想用它(为什么?)还是你认为你不能用它?

标签: php laravel pdo eloquent


【解决方案1】:

不是很优雅,但很有效:

$user = User::find(3);
$newCoordinates = ['coordinates' => DB::raw("GeomFromText('POINT(?, ?)')")];
$user->newQuery()->setBindings([$lat, $lng], 'join')
    ->whereKey($user->id)->update($newCoordinates);

如果要更新更多属性,必须在'coordinates'之后添加。

【讨论】:

    猜你喜欢
    • 2014-12-02
    • 2019-08-20
    • 2017-06-14
    • 2019-03-23
    • 1970-01-01
    • 2018-01-24
    • 2015-03-26
    • 2013-10-23
    • 2018-10-24
    相关资源
    最近更新 更多