我的Action
模型有很多UserAction
个。我需要计算每个UserActions
的{{1}}个数。用于此的SQL是:
Action
我只是想知道在Eloquent查询中是否有办法做到这一点?
感谢。
答案 0 :(得分:1)
确保您在userActions
模型中设置了Action
关系。
例:(假设您在命名空间UserAction
中有App
模型)
class Action extends Model
{
public function userActions()
{
return $this->belongsToMany('App\UserAction');
}
}
然后,就像这样容易:
//$action = some action
$count = $action->userActions->count();
雄辩关系返回集合:https://laravel.com/docs/5.3/eloquent-relationships
count
是Eloquent集合(Laravel集合)提供的方法:https://laravel.com/docs/5.3/collections#method-count
答案 1 :(得分:1)
我解决了这个问题,这是我能够尽可能接近原始查询(或Eloquent-y)的最接近的问题。
UserAction::select(DB::raw('actions.id, actions.name, COUNT(*) AS count'))
->join('actions', 'actions.id', '=', 'user_actions.action_id')
->groupBy('actions.id')->get();
答案 2 :(得分:0)
从Laravel 5.2开始,您可以使用withCount
方法实现一对多关系。
如果要计算关系中的结果数而不实际加载它们,可以使用withCount方法,该方法会在生成的模型上放置{relation} _count列。例如:
$posts = App\Post::withCount('comments')->get();
foreach ($posts as $post) {
echo $post->comments_count;
}
在您的情况下,如果您设置了关系,那么这样的事情应该有效:
$user_actions = App\UserActions::withCount('actions')->get();
foreach ($user_actions as $action) {
echo $action->actions_count;
}
答案 3 :(得分:0)
我需要获取每个操作有多少个UserAction的计数 动作
假设UserAction
可以采取不同类型的操作,并且可以通过action.type
列加以区分,而不是通过Laravel来计算每个Action
的出现方式
UserAction::select(DB::raw('actions.type, actions.name, COUNT(*) AS count'))
->join('actions', 'actions.id', '=', 'user_actions.action_id')
->groupBy('actions.type')->get();
如果action.action_id
等于action.type
,则可以将其简化为
UserAction::select(DB::raw('action_id, COUNT(*) AS count'))
->groupBy('action_id')->get();