Php 如何解决对未定义方法Illumb\Database\Query\Builder::notify()的调用?(拉威尔5.3)

Php 如何解决对未定义方法Illumb\Database\Query\Builder::notify()的调用?(拉威尔5.3),php,laravel,sendmail,laravel-5.3,Php,Laravel,Sendmail,Laravel 5.3,我在控制器中创建的函数如下所示: public function create() { // This is dummpy data to testing checkout order event $data = array( 'number' => '2', 'user' => 'chelsea', 'store'

我在控制器中创建的函数如下所示:

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'             => 'chelsea@gmail.com'
            );
    $data = Order::where('number', $data['number'])->first();
    \Event::fire(new CheckoutOrderEvent($data));
}
<?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());
    }
}
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
<?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');
    }
}
<?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;
..........
我的CheckoutOrderListener如下所示:

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'             => 'chelsea@gmail.com'
            );
    $data = Order::where('number', $data['number'])->first();
    \Event::fire(new CheckoutOrderEvent($data));
}
<?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());
    }
}
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
<?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');
    }
}
<?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;
..........
我的CheckoutOrderEvent如下所示:

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'             => 'chelsea@gmail.com'
            );
    $data = Order::where('number', $data['number'])->first();
    \Event::fire(new CheckoutOrderEvent($data));
}
<?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());
    }
}
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
<?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');
    }
}
<?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;
..........

从讨论中,我发现您的
订单
模型中没有包含
应呈报
特征。改为这样做:

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

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

通过包含它,您的模型现在应该像应该的那样具有
notify
方法,因此可以在通知系统中使用

$data = DB::abcd("Select * from xyz"); ,(abcd->filename)
但我们需要

$data = DB::select("Select * from xyz"); 

你能把整个错误堆栈粘贴给我们吗?这里的证据并没有真正告诉我们问题在哪里。事件的
$data
属性似乎仍然是一个查询生成器-在
存储中,您首先调用了
->first()
来获取模型。@Lionel Chan,我已经更新了我的问题如何显示您的
应用程序\event\CheckoutOrderEvent
class@Lionel陈,我更新了我的问题。奇怪的是,你显示的代码和错误不符。代码清楚地表明您将
Order
模型传递到事件中,但在错误堆栈中,它表示它正在尝试调用名为
CheckoutOrder
的对象(可能是模型)上的
notify
。我错过什么了吗?