簡體   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