Eloquent查询返回按二级关系排序的项目

时间:2017-04-26 04:56:54

标签: mysql laravel eloquent laravel-eloquent laravel-query-builder

我正在尝试构建一个查询,该查询将返回项目的记录及其关系。但是,它需要按二级关系排序。而且,它也需要分页。

以下是模型和关系:

bower install

第一个模型与第二个模型具有一对多关系(第二个模型表具有第一个模型ID的字段)。

第二个模型与第三个模型有很多关系(使用具有第一个模型ID和第二个模型ID的数据透视表)。

所需的返回值是由ThirdModel id排序的FirstModel项的集合。

如何使用Eloquent或Laravel的数据库查询构建器完成此查询?

谢谢。

1 个答案:

答案 0 :(得分:2)

要实现您所描述的内容,您将不得不使用查询构建器并在表中执行连接。

执行此操作时,您还需要对使用软删除的模型保持警惕,并使用whereNull('deleted_at')子句自行处理已删除模型的检查。我在我的例子中评论了这些。

$firsts = FirstModel::select('first_models.*')
    ->join('second_models', 'first_models.id', '=', 'second_models.first_model_id')
    ->join('second_models_third_models', 'second_models.id', '=', 'second_models_third_models.second_model_id')
    ->join('third_models', 'third_models.id', '=', 'second_models_third_models.third_model_id')
    //->whereNull('second_models.deleted_at')
    //->whereNull('third_models.deleted_at')
    ->orderBy('third_models.id', 'asc')
    ->groupBy('first_models.id')
    ->paginate(10);

我倾向于将此查询移到查询范围内,以使您的控制器保持整洁并便于将来重复使用。