我如何创建一个Laravel API来显示管理员根据用户印象数添加的广告



我的laravel项目中有一个管理员端,管理员可以在其中添加广告以及印象和时间。例如,如果我添加一个印象为2、小时为2的add。因此,一旦用户已经观看该广告2次,那么在接下来的2小时内将不会向用户显示该广告。

以下是管理员广告表的结构:

--------------------------------------
id | image    |impressions| hours |
1  | image.png|     2     |   6   |
--------------------------------------

还有一个ads_impression.log,我在其中存储查看过广告的用户的日志

---------------------------------------------
id | user_id | ad_id | impression_datetime |
1  |    1    |   1   | 2020-07-28 23:22:45 |
---------------------------------------------

我如何创建一个laravel查询,这样我就可以获得特定的广告印象计数,如果印象计数在小时内,则向用户显示下一个广告。

这是我的第一个问题。因此,如果有错误,请忽略:(

广告模型

public function users(){
return $this->belongsToMany(AppAdd, 'ads_impression_log', 'ad_id', 'user_id')
->withPivot('impression_datetime');
}

用户模型

public function ads(){
return $this->belongsToMany(AppAdd, 'ads_impression_log', , 'user_id', 'ad_id')
->withPivot('impression_datetime');
}

给定用户($user_id(对给定广告($user_i(的印象计数

我们将在这里使用收集方法filter

$user = User::with('ads')->find($user_id);
//
$ads = $user->ads->filter(function($value, $key){
return $value->id === $ad_id;
});

现在你可以统计这些印象了。

$count = $ads->count();

该广告所需的印象

$ads->first()->impression;

你可以做相应的比较。

要从透视表中获取impression_date列,可以执行以下操作。

foreach($ads as $adImp){
$adImp->pivot->impression_date;
}

最新更新