2016-06-01 5 views
0

Это мой контроллер:ModelNotFoundException при прохождении модели объекта в конструкторе Event

$transaction = new ProductTransactionLog(); 
Event::fire(new SendResponseToProduct($response, $transaction)); 

Это класс событий (SendResponseToProduct):

use Illuminate\Queue\SerializesModels; 
use App\Models\ProductTransactionLog; 

class SendResponseToProduct extends Event 
{ 
    use SerializesModels; 

    public $response = []; 
    public $transaction; 

    /** 
    * Create a new event instance. 
    */ 
    public function __construct($response = [], ProductTransactionLog $product_transaction) 
    { 
     // dd($transaction); 
     $this->response = $response; 
     $this->transaction = $product_transaction; 
     // dd($this->transaction); 
    } 
} 

Это в EventServiceProvider:

protected $listen = [ 
     'App\Events\SendResponseToProduct' => [ 
      'App\Listeners\ResponseToProductListener', 
     ], 
    ]; 

Когда я запускаю контроллер, т.е. когда я запускаю событие, я получаю эту странную ошибку:

NotFoundHttpException in Handler.php line 46: No query results for model [App\Models\ProductTransactionLog].

Когда я dd в конструкторе Event, я получаю объект. Когда я раскомментирую dd, я снова получаю сообщение об ошибке.

Когда я dd в классе Listener, я получаю эту же ошибку. Он не достигает класса Listener.

Что мне здесь не хватает?

+0

, пожалуйста, добавьте определение метода контроллера подписи и весь код в нем, к которому вы направляете. – lagbox

ответ

0

Вы используете SerializesModels черту в SendResponseToProduct для очереди (возможно, для синхронизации). Он всегда сериализует и десериализует все поля.

Эта черта особенно проверить погоду сериализированного поля (в этом примере: $ публичной сделка;) является экземпляром ModelIdentifier (сериализованного поля Model объекта - Model класса еще потому является экземпляром QueueableEntity интерфейса). Если тогда он пытается найти запись модели в БД id, которая в этом случае у вас нет на этой модели, потому что вы просто создали ее без каких-либо данных.

Итак, что вы можете сделать, это удалить признак SerializesModels, если вы не используете очередь - или не передаете здесь модель empyt.

Смежные вопросы