繁体   English   中英

在Laravel中检索数据

[英]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.

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