gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:24:36 24 4
gpt4 key购买 nike

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

以下是模型和关系:

class FirstModel extends Model
{
public function secondModel()
{
return $this->hasMany(SecondModel::class);
}
}

class SecondModel extends Model
{
public function firstModel()
{
return $this->belongsTo(FirstModel::class);
}

public function thirdModel()
{
return $this->belongsToMany(ThirdModel::class);
}
}

class ThirdModel extends Model
{
public function secondModel()
{
return $this->belongsToMany(SecondModel::class);
}
}

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

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

所需的返回将是按 ThirdModel id 排序的 FirstModel 项目的集合。

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

谢谢。

最佳答案

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

执行此操作时,您还需要对使用软删除的模型保持警惕,并使用 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);

我倾向于将此查询移动到查询范围内,以保持您的 Controller 整洁并便于将来的重用。

关于mysql - Eloquent 查询返回按二级关系排序的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43625370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com