【问题标题】:Laravel created event returning the wrong recordLaravel 创建的事件返回错误的记录
【发布时间】:2020-04-16 13:21:28
【问题描述】:

我目前正在使用 Laravel 观察者在我的项目中实现事件,但是,我遇到了一些创建的事件返回错误记录的问题,例如,我创建了一个名为 Like 的记录,它的 post_id 设置为 2 和 user_id设置为 1,所以 laravel created 事件应该返回这条记录,对吗?除了它返回一条记录,其中 post_id 设置为 0,user_id 设置为 1。 我的 LikeObserver 类:

class LikeObserver
{
/**
 * Handle the like "created" event.
 *
 * @param  \App\Like  $like
 * @return void
 */
public function created(Like $like)
{
    dd($like);
    $postId = $like->post_id;
    Post::find($postId)->increment('likes_count');
}
}

正如你所看到的,每当我转储新创建的记录时,它都会返回:

我的 LikeController 类:

class LikeController extends Controller
{
public function insert(Request $request)
{
    if(Like::where('user_id','1')->find($request->post_id))
    {
        return;
    }
    $like = Like::create(['post_id'=>$request->post_id,'user_id' => '1']);
}

public function remove(Request $request)
{
    Like::where('user_id',auth()->user()->id)->findOrFail($request->post_id)->delete();
}
}

我将 post_id 设置为 2,但是 Laravel 返回新创建的记录,并将 post_id 设置为 0。

【问题讨论】:

  • 插入函数中dd($request->post_id)的结果是什么?
  • @am05mhz 它转储正确的 post_id 是 2
  • 我看不出有什么问题,除了某处可能有错别字
  • @am05mhz 我也很难知道它是否是 laravel 的问题.. 我尝试谷歌搜索但没有找到类似的问题

标签: php laravel eloquent laravel-events


【解决方案1】:
class LikeController extends Controller
{
    public function insert(Request $request)
    {
        $like = Like::firstOrCreate([
            'user_id' => '1',
            'post_id' => $request->post_id,
        ]);

        if(! $like->wasRecentlyCreated) {
            return;
        }
    }

    public function remove(Request $request)
    {
        Like::where([
            'user_id' => auth()->user()->id,
            'post_id' => $request->post_id,
        ])->first()->delete();
    }
}

【讨论】:

    【解决方案2】:

    好吧,显然解决方法是使用创建事件而不是创建事件...这确实返回了正确的记录

    public  static function boot()
    {
        parent::boot();
        static::creating(function ($like){
         //returns the correct record.
         dd($like);
        });
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      • 2019-04-17
      • 1970-01-01
      • 2019-04-16
      • 2011-10-05
      • 1970-01-01
      • 2019-05-11
      相关资源
      最近更新 更多