2017-01-13 2 views
-1

Meine Funktion in der Steuerung erstellen, ist wie folgt:So lösen Sie Aufruf an undefinierte Methode 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)); 
} 

Meine CheckoutOrderListener ist wie folgt:

<?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()); 
    } 
} 

hatte ich

Aber Verwendung Illuminate\Notifications\Notifiable; in Modell hinzufügen, um, wenn ausgeführt, gibt es Fehler: Call to undefined method Illuminate\Database\Query\Builder::notify()

Kann mir jemand helfen?

aktualisieren

Der vollständige Fehler ist wie folgt:

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 

Mein CheckoutOrderEvent ist wie folgt:

<?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'); 
    } 
} 

Meine Kasse ist wie folgt:

<?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 [ 
      // 
     ]; 
    } 
} 

Mein Modell ist, um wie folgt aus:

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

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

Können Sie uns auch den gesamten Fehler-Stack einfügen? Die Beweise hier sagen uns nicht wirklich, wo das Problem ist. Es scheint, als ob die '$ data' -Eigenschaft des Ereignisses immer noch ein Abfrage-Generator ist - was Sie in Ihrem' Speicher' '' -> first() 'genannt haben, um ein Modell zu erhalten. –

+0

@Lionel Chan, Ich hatte Update meine Frage –

+0

Wie wäre es mit Ihrer 'App \ Event \ CheckoutOrderEvent' Klasse –

Antwort

3

Wie aus der Diskussion fand ich heraus, dass Sie nicht die Notifiable Eigenschaft in Ihrem Order Modell enthalten waren. Tun Sie dies statt:

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

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

Indem es, Ihr Modell soll nun die notify Verfahren, wie es sollte, und so kann in dem Notification-System verwendet werden.

+1

Großartig. Es klappt. Vielen Dank –

Verwandte Themen