Php 在Laravel中检索数据
我找不到解决方案如何检索属于活动所在用户的链接 以下是我的模型: 用户模型: 活动模式: 任务模型: 链接模型: 所以,管理员创建了一个属于活动的活动和任务,用户可以启动任务,一旦他们启动任务,他们就可以获得分配给该任务和活动的链接 在这种情况下,我可以轻松统计所有用户链接:Php 在Laravel中检索数据,php,laravel,eloquent,Php,Laravel,Eloquent,我找不到解决方案如何检索属于活动所在用户的链接 以下是我的模型: 用户模型: 活动模式: 任务模型: 链接模型: 所以,管理员创建了一个属于活动的活动和任务,用户可以启动任务,一旦他们启动任务,他们就可以获得分配给该任务和活动的链接 在这种情况下,我可以轻松统计所有用户链接: $user = User::find(1); echo $user->links->count(); 但我的问题是如何只回应与活动相关的链接 同样:活动有很多任务,任务有很多链接,用户有很多链接 获取仅属于活
$user = User::find(1);
echo $user->links->count();
但我的问题是如何只回应与活动相关的链接
同样:活动有很多任务,任务有很多链接,用户有很多链接
获取仅属于活动活动的用户的链接数
与分析类似:(
每个链接都有许多分析(跟踪点击)
分析模型:
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
我的示例涵盖了活动的范围
:
// 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
首先,如果您有用户的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
我的示例涵盖了活动的范围
:
// 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
什么定义了活动活动?在表活动中,我的列状态可以是“活动”或“阻止”。在模型中,您没有使用一致的命名约定定义关系。在plural中,什么定义了活动活动?在表活动中,我的列状态可以是“活动”或“阻止”。您没有使用一致的命名约定定义模型中关系的命名约定。hasMany&hasManyThrough=>复数形式