如何知道是否已在laravel中发送特定通知

时间:2018-05-13 18:44:20

标签: php laravel-5 web frameworks

我正在建立一个网站,用户可以根据需要估算的时间购买计划。在他们购买计划后,我创建了一个中间件来检查计划何时完成(计划中的70%),然后发送通知。现在问题是我试图在发送另一个通知之前发现有问题的通知是否已经发送。我使用了数据库通知方法。

要实现这一点,我必须创建一个Notification模型来与我的通知表进行交互。

    <?php

    namespace App;

    use Illuminate\Database\Eloquent\Model;

    class Notification extends Model
    {
        protected $table= "notifications"; 
    }
  

有问题的中间件

 public function handle($request, Closure $next)
    {
       // dd(Carbon::now()->format("Y-m-d"));
       $plan = Booking::where("user_id", Auth::id())
                        ->where("approve", true)
                        ->where("end_date", '>', Carbon::now()->format("Y-m-d"))
                        ->get();
        $i =0;
        $save = [];

        foreach($plan as $plan){

           $save[$i] = (new Plan)->percentageMeter($plan->start_date, $plan->end_date);
           if($save[$i] >= 70){

                $realNotify= Notification::where("notifiable_id", $plan->user_id)
                                    ->get();
                foreach($realNotify as $notify){

                    if($notify->data['plan_id'] == $plan->id && realNotify ==true ){
                        continue;

                    }
                    else{

                        ComNotify::planAboutToExpire(Booking::find($plan->id));

                    }
                }



               continue;

           }

           $i++;
        }
    // dd($save);

    }

我遇到这个问题的一个主要原因是我无法访问&#34; plan_id&#34;对象,因为它没有自己的表列。

是否有Laravel方法可以做到这一点?一个干净利落的方式。

public function toArray($notifiable)
    {
        return [
            "type"=>"plan_about_to_expire",
            "message"=>"Your plan will soon expire on " . $this->plan->end_date,
            "plan_id"=>$this->plan->id,


        ];
    }

我向theArray方法发送通知

1 个答案:

答案 0 :(得分:0)

不确定您使用的是哪个版本, 但是在5.3及更高版本中,您可以使用通知数据库并检查用户是否有'type'个通知。