laravel通过多列的雄辩顺序并在一列中显示

时间:2015-07-03 13:36:37

标签: php mysql laravel laravel-5 eloquent

我有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个不同的表和不同的列中弹出。 如何对此列表进行排序。

1 个答案:

答案 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可能会降低代码的可移植性。