实际上,我需要在后视图上实现一个计数器。
我的桌子结构Advertissements
是
Id, Title, Descritpion, Content, view_count, visited_date, Ip
我尝试使用一个事件,但这不是我认为的最佳实践。我不知道将代码放在哪里。
public function show($slug) {
$advert = Advertissement::where('slug', $slug)->firstOrFail();
$author = $advert->user;
$socials = Social::all();
$catAdvert = AdvertCategory::with(['advertissements' => function($query){
$query->orderBy('created_at', 'DESC')->get();
}]);
//Event problem here
Event::fire('advertissements.view', $advert);
return View::make('advertissements.show', compact('advert', 'author', 'catAdvert', 'socials'));
}
请参阅官方文档。
Laravel Event类提供了一个简单的观察者实现,使您可以订阅和侦听应用程序中的事件。
在您的代码中,您触发了一个未在任何地方注册的事件。
首先,您需要在触发过程中将数据作为数组传递:
Event::fire('advertissements.view', array($advert));
其次,设置监听器。它可以在您执行的代码中的任何位置,我通常将其放在app/routes.php
文件中(其他人可以在app/start/global.php
Composer自动加载的文件中或其中...由您决定):
Event::listen('advertissements.view', function($advert) {
// Do what you want to handle the event
});
PS:仅供参考,这是在Laravel 4.x中处理事件的方式,在Laravel 5中,它有所变化。泰勒(Taylor)改进了流程,增加了工匠命令来帮助制作和设置事件。看看Laravel 5事件文档
建立模型 Counter
class Counter extends Eloquent {
protected $table = 'counters';
public function advertissement()
{
return $this->belongsTo('Advertissement');
{
}
在Advertissement
模型中添加
public function counter()
{
return $this->hasOne('Counter');
{
在的迁移中,为Counter
添加一个无符号整数,为添加另一个未advertissement_id
分段的整数views
,然后在侦听器中使用:
Event::listen('advertissements.view', function($advert) {
$counter = new Counter();
$counter->views = $advert->counter()->views++;
$advert->counter()->save($counter);
});
未经测试(我的计算机上目前没有可正常使用的4.2),但可以正常工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句