2017-07-26 77 views
2

我想为我的产品计数观看次数。为此,我的产品表中有一列view_count。我试图用事件监听器来实现它。如何统计帖子(Laravel Event Listener)的视图数量?

这是我的事件代码:

ProductWasViewed.php

<?php namespace App\Events; 
use App\Events\Event; 
use App\Modules\Product\Models\Product; 
use Illuminate\Queue\SerializesModels; 
use Illuminate\Contracts\Broadcasting\ShouldBroadcast; 

class ProductWasViewed 

{ 
    use SerializesModels; 
    public $product; 

    public function __construct(Product $product) 
    { 
     $this->product = $product; 
    } 

    public function broadcastOn() 
    { 
     return []; 
    } 
} 

这是我的听众代码

IncrementProductViewCount.php

<?php namespace App\Listeners; 
use App\Events\ProductWasViewed; 
use Illuminate\Queue\InteractsWithQueue; 
use Illuminate\Contracts\Queue\ShouldQueue; 
use App\Modules\Product\Models\Product; 

class IncrementProductViewCount 
{ 
    public function __construct() { } 

    public function handle(ProductWasViewed $event) 
    { 
     $event->product->increment('view_count'); 
    } 
} 

EventServiceProvider.php阵:

'App\Events\ProductWasViewed' => [ 
      'App\Listeners\IncrementProductViewCount', 
     ], 

控制器是我过去的事件侦听器:

Type error: Argument 1 passed to App\Events\ProductWasViewed::__construct() must be an instance of App\Modules\Product\Models\Product, instance of stdClass given

如何解决这个问题:

public function singleProduct(Request $request) 
{ 
    $name = $request->name; 
    $product = DB::table('products')      
      ->where('name' , '=', $name)  
      ->where('status','=',1) 
      ->first(); 
    Event::fire(new ProductWasViewed($product)); 

} 

,我得到的错误?请帮忙。

回答

2

查询生成器请求返回stdClass对象。您需要在这里使用Eloquent获取Product对象:

$product = Product::where('name', $name)->where('status', 1)->first(); 
相关问题