在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
,但我不想选择所有原始列。
答案 0 :(得分:1)
selectRaw
添加一个原始选择表达式。它不会选择所有原始列。它还具有用于绑定的第二个参数,因此您可以使用此参数:
return User::findOrFail($userId)
->dogs()
->select('name')
->selectRaw('coalesce(birth_year, ?) <> ? as birth_year', ['', ''])
->selectRaw('coalesce(breed, ?) <> ? as breed', ['', $userId])
->get();