[英]Retrieving data in Laravel
我找不到解决方案如何在活动处于活动状态时检索属于用户的链接?
这是我的模型:
public function links(){
return $this->hasMany('Link','user_id');
}
public function analytic(){
return $this->hasManyThrough('Analytic','Link');
}
public function task(){
return $this->hasMany('Task','campaign_id');
}
public function links(){
return $this->hasManyThrough('Link','Task');
}
public function campaign(){
return $this->belongsTo('Campaign','campaign_id');
}
public function links(){
return $this->hasMany('Link','task_id');
}
public function analytic(){
return $this->hasManyThrough('Analytic','Link');
}
public function task(){
return $this->belongsTo('Task','task_id');
}
public function user(){
return $this->belongsTo('User','user_id');
}
public function analytic(){
return $this->hasMany('Analytic','link_id');
}
因此,管理员创建了一个属于该活动的活动和任务,并且用户可以启动任务,一旦他们开始执行任务,就可以为该任务和活动分配链接。
在这种情况下,我可以轻松计算所有用户链接:
$user = User::find(1);
echo $user->links->count();
但是我的问题是如何仅回显与活动广告系列相关的链接。
再说一次:CAMPAIGN有许多任务,TASK有许多链接,USER有许多链接。
获取仅活动广告系列中属于用户的链接数。
与分析类似的东西:(
每个链接都有很多分析(跟踪点击)
分析模型:
public function links(){
return $this->belongsTo('Link','link_id');
}
还需要仅对活动市场活动中的任务回显链接数。
首先,如果您有用户id
,则无需为该用户运行查询:
$user=User::find($id); // redundant
// instead
Link::where('user_id', $id)->count();
现在要获取有效广告系列的链接:
Link::whereHas('task', function ($q) {
$q->whereHas('campaign', function ($q) {
$q->active(); // or where('status', 'active'); see below
});
})->where('user_id', $id)->get();
// of course you can start with $user->links()->whereHas ... instead
我的示例涵盖了广告系列的scope
:
// Campaign model
public function scopeActive($query)
{
$query->where('status', 'active');
}
计数也一样:
Link::whereHas('task', function ($q) {
$q->whereHas('campaign', function ($q) {
$q->active();
});
})->where('user_id', $id)->count();
您也可以在范围内将whereHas
链包装起来:
// Link model
public function scopeOnlyActiveCampaigns($query)
{
$query->whereHas('task', function ($q) {
$q->whereHas('campaign', function ($q) {
$->active();
});
});
}
// then simply:
Link::onlyActiveCampaigns()->where('user_id', $id)->count();
并如评论中所述:为关系使用一致的名称,这将使您的生活更轻松:
$link->analytic; // collection, better analytics
$analytic->links; // single Link model, better link etc
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.