2017-07-26 76 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(); 
相關問題