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

tyu7yeag  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(373)

我有一个管理方面,在我的拉威尔项目,管理员可以添加与印象和时间一起的广告。例如,如果我添加一个add,impression=2,hours=2。所以,一旦用户已经看了2次这个广告,那么用户将不会显示该广告在未来2小时。
以下是admin ads表的结构:

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

还有一个ads\u impression\u log,我存储了看过广告的用户的日志

  1. ---------------------------------------------
  2. id | user_id | ad_id | impression_datetime |
  3. 1 | 1 | 1 | 2020-07-28 23:22:45 |
  4. ---------------------------------------------

我怎样才能创建一个laravel查询,以便我得到具体的广告印象计数,如果印象计数是在小时内显示给用户下一个广告。
这是我的第一个问题。所以,如果有错误,请忽略:)

vybvopom

vybvopom1#

广告模式

  1. public function users(){
  2. return $this->belongsToMany(App\Add, 'ads_impression_log', 'ad_id', 'user_id')
  3. ->withPivot('impression_datetime');
  4. }

用户模型

  1. public function ads(){
  2. return $this->belongsToMany(App\Add, 'ads_impression_log', , 'user_id', 'ad_id')
  3. ->withPivot('impression_datetime');
  4. }

给定广告的给定用户($user\u id)的印象计数($user\u id)
我们将使用收集方法 filter 在这里。

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

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

  1. $count = $ads->count();

广告需要的印象。

  1. $ads->first()->impression;

你可以做相应的比较。
要从pivot表中获取impression\u date列,可以执行以下操作。

  1. foreach($ads as $adImp){
  2. $adImp->pivot->impression_date;
  3. }
展开查看全部

相关问题