我有4张桌子:
我有一个表格,用于显示用户数据。 在这个表中,我有一个名为Name的列,其中我使用下面的代码
<td>
@if($user->pro))
{{$user->pro->company_name}}
@elseif($user->particular))
{{$user->particular->name." ".$user->particular->last_name}}
@elseif($user->advertiser)
{{$user->advertiser->company_name}}
@endif
</td>
因此,该列从3个不同的表和不同的列中弹出。 如何对此列表进行排序。
答案 0 :(得分:1)
您将需要一个复杂的ORDER BY子句,您无法使用Eloquent的方法进行设置。但是,Eloquent构建器提供了 orderByRaw()方法,让您在ORDER BY子句中使用原始SQL表达式。将它与几个SQL IF相结合(对于MySQL,请参阅https://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html#function_if),你应该得到你需要的东西。
在你的情况下,它会像:
->orderByRaw("IF(user.is_pro,pro.company_name,IF(user.is_particular, particular.name, IF(user.is_advertiser,advertiser.company_name,'')))")
请记住,按此类表达式排序可能会对性能产生负面影响,使用原始SQL可能会降低代码的可移植性。