2017-01-13 7 views
-1

Моя функция создания в контроллере, как это:Как решить Call to undefined method Illuminate Database Query Builder :: notify()? (Laravel 5,3)

public function create() 
{ 
    // This is dummpy data to testing checkout order event 
    $data = array(
       'number'   => '2', 
       'user'    => 'chelsea', 
       'store'    => 'chelsea shop', 
       'total_amount'  => 11000000, 
       'total_product'  => 2, 
       'status'   => '92000000', 
       'delivery_address' => 'london', 
       'email'    => '[email protected]' 
      ); 
    $data = Order::where('number', $data['number'])->first(); 
    \Event::fire(new CheckoutOrderEvent($data)); 
} 

Мой CheckoutOrderListener как это:

<?php 
namespace App\Listeners; 
use App\Events\CheckoutOrderEvent; 
use Illuminate\Queue\InteractsWithQueue; 
use Illuminate\Contracts\Queue\ShouldQueue; 
class CheckoutOrderListener 
{ 
    public function __construct() 
    { 
     // 
    } 

    public function handle(CheckoutOrderEvent $event) 
    { 
     $event->data->notify(New \App\Notifications\CheckoutOrder()); 
    } 
} 

Я был добавить использование Illuminate\Notifications\Notifiable; в модели порядка

Но, когда существует ошибка: Call to undefined method Illuminate\Database\Query\Builder::notify()

Есть ли кто-нибудь, кто может мне помочь?

Update

Полная ошибка выглядит так:

BadMethodCallException in Builder.php line 2440: Call to undefined method Illuminate\Database\Query\Builder::notify() 

    in Builder.php line 2440 
    at Builder->__call('notify', array(object(CheckoutOrder))) 
    at call_user_func_array(array(object(Builder), 'notify'), array(object(CheckoutOrder))) in Builder.php line 1438 
    at Builder->__call('notify', array(object(CheckoutOrder))) 
    at call_user_func_array(array(object(Builder), 'notify'), array(object(CheckoutOrder))) in compiled.php line 11602 
    at Model->__call('notify', array(object(CheckoutOrder))) in CheckoutOrderListener.php line 33 
    at CheckoutOrderListener->handle(object(CheckoutOrderEvent)) 
    at call_user_func_array(array(object(CheckoutOrderListener), 'handle'), array(object(CheckoutOrderEvent))) in compiled.php line 10127 
    at Dispatcher->Illuminate\Events\{closure}(object(CheckoutOrderEvent)) 
    at call_user_func_array(object(Closure), array(object(CheckoutOrderEvent))) in compiled.php line 10067 
    at Dispatcher->fire('App\Events\CheckoutOrderEvent') in compiled.php line 6290 
    at Facade::__callStatic('fire', array(object(CheckoutOrderEvent))) in OrderController.php line 68 
    at OrderController->create() 
    at call_user_func_array(array(object(OrderController), 'create'), array()) in compiled.php line 9385 
    at Controller->callAction('create', array()) in compiled.php line 9412 
    at ControllerDispatcher->dispatch(object(Route), object(OrderController), 'create') in compiled.php line 8470 
    at Route->runController() in compiled.php line 8451 
    at Route->run(object(Request)) in compiled.php line 8147 
    at Router->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 53 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in compiled.php line 9978 
    at SubstituteBindings->handle(object(Request), object(Closure)) in compiled.php line 9870 
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in compiled.php line 3151 
    at VerifyCsrfToken->handle(object(Request), object(Closure)) in compiled.php line 9870 
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in compiled.php line 13467 
    at ShareErrorsFromSession->handle(object(Request), object(Closure)) in compiled.php line 9870 
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in compiled.php line 11907 
    at StartSession->handle(object(Request), object(Closure)) in compiled.php line 9870 
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in compiled.php line 13213 
    at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in compiled.php line 9870 
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in compiled.php line 13150 
    at EncryptCookies->handle(object(Request), object(Closure)) in compiled.php line 9870 
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in compiled.php line 9855 
    at Pipeline->then(object(Closure)) in compiled.php line 8148 
    at Router->runRouteWithinStack(object(Route), object(Request)) in compiled.php line 8139 
    at Router->dispatchToRoute(object(Request)) in compiled.php line 8130 
    at Router->dispatch(object(Request)) in compiled.php line 2472 
    at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) in Pipeline.php line 53 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in compiled.php line 3213 
    at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in compiled.php line 9870 
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in compiled.php line 9855 
    at Pipeline->then(object(Closure)) in compiled.php line 2416 
    at Kernel->sendRequestThroughRouter(object(Request)) in compiled.php line 2400 
    at Kernel->handle(object(Request)) in index.php line 53 

Мой CheckoutOrderEvent как это:

<?php 
namespace App\Events; 
use Illuminate\Broadcasting\Channel; 
use Illuminate\Queue\SerializesModels; 
use Illuminate\Broadcasting\PrivateChannel; 
use Illuminate\Broadcasting\PresenceChannel; 
use Illuminate\Broadcasting\InteractsWithSockets; 
use Illuminate\Contracts\Broadcasting\ShouldBroadcast; 
class CheckoutOrderEvent 
{ 
    use InteractsWithSockets, SerializesModels; 
    public $data; 

    public function __construct($data) 
    { 
     $this->data = $data; 
    } 
    public function broadcastOn() 
    { 
     return new PrivateChannel('channel-name'); 
    } 
} 

Мой CheckoutOrder как это:

<?php 
namespace App\Notifications; 
use Illuminate\Bus\Queueable; 
use Illuminate\Notifications\Notification; 
use Illuminate\Contracts\Queue\ShouldQueue; 
use Illuminate\Notifications\Messages\MailMessage; 
class CheckoutOrder extends Notification 
{ 
    use Queueable; 
    public function __construct() 
    { 
     // 
    } 
    public function via($notifiable) 
    { 
     return ['mail']; 
    } 
    public function toMail($notifiable) 
    { 
     return (new MailMessage) 
        ->line('The introduction to the notification.') 
        ->action('Notification Action', 'https://laravel.com') 
        ->line('Thank you for using our application!'); 
    } 
    public function toArray($notifiable) 
    { 
     return [ 
      // 
     ]; 
    } 
} 

Моя модель заказ, как это:

use Eloquent as Model; 
use Illuminate\Database\Eloquent\SoftDeletes; 
use Illuminate\Notifications\Notifiable; 

class Order extends Model 
{ 
    use SoftDeletes; 
.......... 
+0

Можете ли вы также вставить нам весь стек ошибок? Свидетельства здесь не говорят нам о том, в чем проблема. Похоже, что свойство '$ data' события является по-прежнему построителем запросов, которое в вашем' store' вы вызывали '-> first()' для получения модели. –

+0

@ Lionel Chan, я обновил свой вопрос –

+0

Как насчет того, чтобы показать свой класс 'App \ Event \ CheckoutOrderEvent' –

ответ

3

В ходе обсуждения я узнал, что вы не включили Notifiable черты в вашей Order модели. Сделайте это вместо того, чтобы:

use Eloquent as Model; 
use Illuminate\Database\Eloquent\SoftDeletes; 
use Illuminate\Notifications\Notifiable; 

class Order extends Model 
{ 
    use SoftDeletes, Noifiable; 
    .......... 

Включив его, ваша модель должна теперь метод notify как следует, и поэтому могут быть использованы в системе уведомлений.

+1

Отлично. Оно работает. благодаря –

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

  • Нет связанных вопросов^_^