查询父模型Article时如何对关联的article_blocks应用相同排序规则
实现方式有两种,可根据你的使用场景选择:
方案1:仅在当前查询中临时生效
如果你只需要在getArticle这个查询里对关联的article_blocks排序,直接在with方法中给对应关联绑定自定义查询闭包即可,修改后代码如下:
public static function getArticle($id) { return Article::where('id', $id) ->with([ 'blog_categories', 'article_recommendations', 'article_blocks' => function ($query) { $query->orderBy('order', 'ASC'); }, 'article_comments' ]) ->first(); }
方案2:全局关联默认排序(更推荐)
如果你希望所有调用Article和ArticleBlock关联的场景,都默认按order升序返回结果,直接修改Article模型中定义article_blocks关联的方法,加上排序规则即可:
// App\Models\Article.php 中对应的关联方法 public function article_blocks() { return $this->hasMany(ArticleBlock::class)->orderBy('order', 'ASC'); }
修改后你原本的getArticle方法不需要做任何调整,关联返回的article_blocks会自动应用排序规则,也和你单独写的getArticleBlocks排序逻辑完全一致,避免后续重复编写排序代码。
内容的提问来源于stack exchange,提问作者user17428261
相关产品推荐
相关产品推荐

