繁体   English   中英

Laravel查询模型关系

[英]Laravel querying model relations

我仍在为laravel模型而苦苦挣扎。 最初,我尝试使用表来完成所有操作,但这并不明智,我会错过许多laravel函数。

我有以下设置

  • ProjectTwitterStatus链接项目和Twitter状态。
  • TwitterStatus具有Twitter状态的所有详细信息,并具有唯一的ID(详细信息中包括“发布于” tweet的日期时间)
  • TwitterRetweets具有TwitterStatus的ID-实际的转发-以及已转发状态的tweet ID
  • TwitterReplies具有TwitterStatus的ID(即实际答复)和/或用户ID(如果不是对状态的答复而是对用户的答复)。

我想要的是? 要使用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')));

我尝试例如这样做来添加添加的转发数量,但没有效果(对对象-> array()中的模型apears的引用。

$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')));

谁能指出我正确的方向?

不能100%确定您打算使用的解决方案的方式-假设您只是想计算与twitterStatus相关的转发数量?

$count = $twitterStatus->twitterRetweet()->count();

其中$twitterStatus是已检索的模型-不是集合。

如果$twitterStatus是一个要迭代的集合,您也可以使用with()load()来加载相关模型

然后,您可以遍历集合中的每个模型-取决于您要如何使用结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM