【发布时间】:2015-04-13 22:28:57
【问题描述】:
我试图弄清楚如何在查询中进行查询。 (如果这有道理的话)我想抓住所有的活动。对于每个活动,我想获取执行该活动的用户数。然后我想根据进行每个活动的用户数量以 DESC 顺序对所有活动进行排序。我基本上是在制作一个“热门活动页面”,我会在其中显示从大多数用户完成的活动开始的所有活动。
为此我有 3 个主表
用户
| id | name | password | email | created_at |
活动
| id | title | description | created_at |
resource 这是我用于帖子的表格,它显示了哪个用户做了哪个活动。 (用户可以显示他们做了什么活动,并在帖子中附加媒体和位置)
| id | user_id | activity_id | media_id | location_id | created_at |
这是我的每张桌子的模型
用户模型
class User extends Eloquent {
protected $table = 'users';
/**
* get the activities associated with the given user
* @return mixed
*/
public function activities()
{
return $this->belongsToMany('Acme\Activities\Activity', 'resource', 'activity_id');
}
public function posts(){
return $this->hasMany('Acme\Resource\Resource');
}
public function media()
{
return $this->hasMany('Acme\Media\Media');
}
public function locations()
{
return $this->hasMany('Acme\Locations\Location');
}
}
活动模型
class Activity extends Eloquent {
protected $table = 'activities';
public function posts(){
return $this->hasMany('Acme\Resource\Resource', 'resource_id');
}
/**
* get the users associated with the given activity card
* @return mixed
*/
public function users()
{
return $this->belongsToMany('Acme\Users\User', 'resource', 'user_id');
}
}
资源模型
class Resource extends Eloquent {
protected $table = 'resource';
public function user()
{
return $this->belongsTo('Acme\Users\User', 'user_id');
}
public function activities()
{
return $this->belongsTo('Acme\Activities\Activity', 'activity_id');
}
public function media()
{
return $this->hasMany('Acme\Media\Media', 'media_id');
}
public function locations()
{
return $this->belongsTo('Acme\Locations\Location', 'location_id');
}
}
我知道我可以使用
获取所有活动Activity::get()
我可以使用
获取特定活动的用户数User::whereHas('resource', function($q) use ($activity_id){
$q->where('activity_id', $activity_id);
})->get()->count();
但我不知道如何将所有这些放在一起,以便让所有活动按用户数排序,从用户数最多的活动开始。
如何使用 eloquent 进行此查询?
提前致谢!
【问题讨论】:
标签: php mysql sql laravel eloquent