top-think/think

关联模型的字段如何参与排序?

mkinit opened this issue · 2 comments

我有一个数据表,是文章的自定义字段表,已经通过一对多关联,请问在查询数据的时候这个关联的表字段怎么参与排序?
+----+---------+----------+------------+
| id | post_id | meta_key | meta_value |
+----+---------+----------+------------+
| 1 | 12 | price | 20 |
| 2 | 11 | price | 35 |
+----+---------+----------+------------+

//关联的自定义字段
public function meta() {
return $this->hasMany(Meta::class);
}

//控制器查询语句
PostModel::where($where)
->page($this->page, $this->pageSize)
->orderRaw('time_add desc')//如何让meta_key和meta_value字段作为排序条件
->select();

你这个问题,需要用view解决,但是如果不用group,主表内容会重复(副表有多条记录时)
用了group,数据量大时可能有性能问题
以下为示例代码,可以酌情参考

Db::view('post','*')->view('postMeta',['meta_key','meta_value'],'postMeta.article_id=post.id','left')->order('meta_value')->limit(10)->select();

你这个问题,需要用view解决,但是如果不用group,主表内容会重复(副表有多条记录时) 用了group,数据量大时可能有性能问题 以下为示例代码,可以酌情参考

Db::view('post','*')->view('postMeta',['meta_key','meta_value'],'postMeta.article_id=post.id','left')->order('meta_value')->limit(10)->select();

非常感谢。