我仍然在使用laravel模型。起初我尝试使用表格来完成所有操作,但这并不聪明,我会错过许多laravel函数。
我有以下设置
我想要什么?使用laravel模型关系获取每个日期(DATE(datetime)
)的状态,转发和回复的计数。
这些是模特。
class ProjectTwitterStatus extends Eloquent {
protected $table = 'project_twitter_statuses';
protected $softDelete = true;
public function twitterStatus() {
return $this->belongsTo('TwitterStatus');
}
public function project() {
return $this->belongsTo('Project');
}
}
class TwitterStatus extends Eloquent {
protected $table = 'twitter_statuses';
public function twitterRetweet() {
return $this->hasMany('TwitterRetweet');
}
public function twitterReply() {
return $this->hasMany('TwitterReply');
}
public function twitterUser() {
return $this->belongsTo('TwitterUser');
}
public function projectTwitterStatus() {
return $this->hasMany('ProjectTwitterStatus');
}
}
class TwitterRetweet extends Eloquent {
protected $table = 'twitter_retweets';
public function twitterStatus() {
return $this->belongsTo('TwitterStatus');
}
}
class TwitterReply extends Eloquent {
protected $table = 'twitter_replies';
public function twitterStatus() {
return $this->belongsTo('TwitterStatus');
}
}
我使用这个获得了twitterStatuses的计数:
$twitterStatuses = TwitterStatus::has('projectTwitterStatus')
->groupBy(DB::raw('DATE(datetime)'))
->get(array(DB::raw('COUNT(id) AS tweets'),DB::raw('DATE(datetime) AS date')));
我试过这个例子来添加转推计数但是没有效果(对象中的模型apears的参考 - > array()。
$twitterStatuses = TwitterStatus::has('projectTwitterStatus')
->with(array('twitterRetweet' => function($query)
{
$query->count();
}))
->groupBy(DB::raw('DATE(datetime)'))
->take(10)
->get(array(DB::raw('COUNT(id) AS tweets'),DB::raw('DATE(datetime) AS date')));
有人能指出我正确的方向吗?
答案 0 :(得分:0)
不是100%确定如何使用您的预期解决方案 - 假设您只想计算与twitterStatus相关的转推数量?
$count = $twitterStatus->twitterRetweet()->count();
其中$twitterStatus
是已经检索过的模型 - 不是集合。
如果$twitterStatus
是要迭代的集合,您还可以使用with()
或load()
然后你可以迭代集合中的每个模型 - 取决于你想如何使用结果