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

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

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

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

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

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

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

vybvopom

vybvopom1#

广告模式

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

用户模型

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

给定广告的给定用户($user\u id)的印象计数($user\u id)
我们将使用收集方法 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;

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

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

相关问题