Sql 如何在Laravel中的其他两个联接表上按日期列排序表?

Sql 如何在Laravel中的其他两个联接表上按日期列排序表?,sql,laravel,postgresql,eloquent,sql-order-by,Sql,Laravel,Postgresql,Eloquent,Sql Order By,我有以下表格: table_1 id | table_2_id | table_3_id | table_1_specific_columns 1 | null | 1 | 2 | 1 | null | ... 以及: 以及: 数据库是PostgreSQL 如何在Laravel中按表2和表3上的日期列对表1进行排序 这可以用雄辩的语言来完成吗 编辑:如果可以使用Elounce完成,则预期结果是表

我有以下表格:

table_1
id      | table_2_id |  table_3_id | table_1_specific_columns
1       | null       | 1           |
2       | 1          | null        |
...
以及:

以及:

数据库是PostgreSQL

如何在Laravel中按表2和表3上的日期列对表1进行排序

这可以用雄辩的语言来完成吗

编辑:如果可以使用Elounce完成,则预期结果是表1模型的集合,表2和表3的关系由表2和表3中的日期列排序

编辑2:

表1的asc排序的预期结果。添加日期列是为了快速参考,不是必需的

id      | table_2_id |  table_3_id           | date
1       | null       | 2                     | 02-02-1989
2       | 1          | null                  | 01-01-1990
1       | null       | 1                     | 01-01-1991
2       | 2          | null                  | 02-02-1992
您好,您可以使用语法

因此,您的代码将类似于:

Table::orderByRaw("column DESC, column2 ASC")->get();

从您共享的内容来看,您可能有表2或表3关系(如果有),因此您可以:

DB::table('table_1')
    ->leftJoin('table_2', 'table_1.table_2_id','table_2.id')
    ->leftJoin('table_3', 'table_1.table_3_id','table_3.id')
    ->select('table_1.*')
    ->orderByRaw('COALESCE(table_2.date, table_3.date)');
注:如果一行同时与表2和表3相关,则顺序仅由表2给出

这里的缺点是,您还将包括与任何内容都不相关的
表1
的任何行。您可以通过添加
->whereNotNull('table_2.id')->或whereNotNull('table_3.id')


如果您有一个模型,您可以修改上面的内容,例如使用
Table1::leftJoin….
而不是使用
DB::table
,在这种情况下
select('table_1.*)
变得更加重要,不要在模型对象中添加错误的值

同时指定预期结果。@jarlh添加了预期结果Specify,没有描述。@jarlh在排序后添加了结果的具体示例
Table::orderByRaw("column DESC, column2 ASC")->get();
DB::table('table_1')
    ->leftJoin('table_2', 'table_1.table_2_id','table_2.id')
    ->leftJoin('table_3', 'table_1.table_3_id','table_3.id')
    ->select('table_1.*')
    ->orderByRaw('COALESCE(table_2.date, table_3.date)');