我正在尝试构建一个查询,该查询将返回项目的记录及其关系。但是,它需要按二级关系排序。而且,它也需要分页。
以下是模型和关系:
bower install
第一个模型与第二个模型具有一对多关系(第二个模型表具有第一个模型ID的字段)。
第二个模型与第三个模型有很多关系(使用具有第一个模型ID和第二个模型ID的数据透视表)。
所需的返回值是由ThirdModel id排序的FirstModel项的集合。
如何使用Eloquent或Laravel的数据库查询构建器完成此查询?
谢谢。
答案 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);
我倾向于将此查询移到查询范围内,以使您的控制器保持整洁并便于将来重复使用。