如何设置DB :: raw的绑定?

时间:2018-10-18 21:25:47

标签: php laravel laravel-5 eloquent

在Laravel 5.7中,我有一个像这样的口才:

return User::findOrFail($userId)
    ->dogs()
    ->setBindings(['', '', '', '', $userId])
    ->get([
        'name',
        DB::raw('coalesce(birth_year, ?) <> ? as birth_year')
        DB::raw('coalesce(breed, ?) <> ? as breed')
    ]);

这是一个简化的示例,但是我通常需要将绑定传递给DB::raw()

我的示例有效,但我不喜欢需要手动覆盖$userId关系中自然产生的user-dogs的事实。另外,我不喜欢所有绑定都在一起。

是否有更好的方法来使用DB::raw?我知道有一个selectRaw,但我不想选择所有原始列。

1 个答案:

答案 0 :(得分:1)

selectRaw添加一个原始选择表达式。它不会选择所有原始列。它还具有用于绑定的第二个参数,因此您可以使用此参数:

return User::findOrFail($userId)
    ->dogs()
    ->select('name')
    ->selectRaw('coalesce(birth_year, ?) <> ? as birth_year', ['', ''])
    ->selectRaw('coalesce(breed, ?) <> ? as breed', ['', $userId])
    ->get();