Php laravel 5.4使用事件和侦听器增加页面点击率

Php laravel 5.4使用事件和侦听器增加页面点击率,php,laravel,Php,Laravel,我有两个模特,有很多对很多的关系艺术家和歌曲 然后在我的艺术家表中有一些字段叫做weekhits和week_date, 当用户访问某个特定的艺术家页面时,我想增加每周点击量的值 如此制作事件列表器 class ArtistEvent { use Dispatchable, InteractsWithSockets, SerializesModels; public $artist; /** * Create a new event instance.

我有两个模特,有很多对很多的关系艺术家和歌曲

然后在我的艺术家表中有一些字段叫做weekhits和week_date, 当用户访问某个特定的艺术家页面时,我想增加每周点击量的值

如此制作事件列表器

class ArtistEvent
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $artist;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct(artist $artist)
    {
        //
        $this->artist = $artist;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return Channel|array
     */
    public function broadcastOn()
    {
        return new PrivateChannel('channel-name');
    }
}
这是听众

class ArtistViewed
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  ArtistEvent  $event
     * @return void
     */
    public function handle(ArtistEvent $event)
    {
        $event->artist->increment('week_hits');
    }
}
这就是我解雇听众的地方

public function artist($id,$slug){
        $artist = Artist::where('id', $id)->where('slug', $slug)->first();
        Event::fire(new ArtistViewed($artist));

        return view('front.artist', compact('artist'));
    }
但这段代码并不是在我的艺术家表中增加week hits字段


请帮忙。我在学习LaaFurle的时候。

< P>我认为你把事件和听众弄糊涂了——你把听者发射到<代码>事件::Field()/代码>,然后把<代码> $艺术家>代码传递到监听器的构造函数中,但是尝试把它从<代码> $$事件< /代码>下删除。 请记住,如果队列驱动程序不是
sync
,则实际上需要从命令行运行队列,否则这些作业将永远不会运行

下面是一个示例,说明如何使用分派的作业执行此操作。您可以通过调用
dispatch(newrecordartistview($artist))
来启动此功能


我已经添加了一个建议为此使用作业的答案,但是如果您想使用现有的事件/侦听器设置,那么只需修复对
事件::fire()
的调用,以实际触发您的事件,而不是您的侦听器

Event::fire(new ArtistEvent($artist))
还要确保事件和侦听器已在
EventServiceProvider
$listen
数组中注册

\App\Events\ArtistEvent::class => [
    \App\Listeners\ArtistViewed::class
]

$event->artist()->增量('week_hits')?Artister是一个函数,我不是舒尔,但您不必在增量后调用save函数?这不是方法。它是您可以在handle()函数中添加($event->artist)的artistCan实例。。。它给了什么,它到达那里了吗?即使当我添加它时,它也不是死亡转储。为什么要使用
作业
而不是
事件
?我认为这项工作会使事情变得更复杂,可能会增加延迟,而页面视图之类的事件应该立即更新。啊,通常情况下,事件侦听器会排队-假设您在这里这样做。您可能会对此进行排队的一个原因是,您实际上正在向页面加载添加延迟(每次请求时都需要更新艺术家)。如果您想使用事件/侦听器设置,请更改
event::fire
以实际触发事件,不是侦听器。那么事件侦听器队列的处理方式是否与作业队列相同?如果我将队列驱动程序设置为
数据库
,我是否也会在数据库中看到事件侦听器队列?对不起,默认情况下,事件侦听器不排队-您必须选择加入该队列。如果您没有将事件侦听器排队,那么它应该作为同一请求的一部分发生。看看我的另一个答案。这解决了我的问题。这就是我想要的,当访问艺术家页面或重新加载页面以增加该字段时,增加艺术家表中的week_hits字段,谢谢您的帮助
\App\Events\ArtistEvent::class => [
    \App\Listeners\ArtistViewed::class
]