Laravel firstOrCreate没有雄辩

时间:2018-11-27 19:57:31

标签: laravel

Eloquent具有firstOrCreate方法,该方法根据条件获取模型,如果不存在则创建模型。

Laravel的查询生成器中是否有任何等效方法(即,不是Eloquent中的方法)?例如:

$row = DB::table('users')->where('user_id', 5)->firstOrCreate('name' => 'Peter', 'last_name' => 'Pan');

这将尝试使用users'user_id'==5中获得一行。如果不存在,它将插入具有该ID号的行以及其他提到的字段。

编辑:我不打算对用户提出问题。我以用户为例,尽可能明确我要寻找的内容。

3 个答案:

答案 0 :(得分:0)

不是,Laravel firstOrCreate是函数,然后说:

public function firstOrCreate(array $attributes, array $values = [])
{
    if (! is_null($instance = $this->where($attributes)->first())) {
        return $instance;
    }

    return tap($this->newModelInstance($attributes + $values), function ($instance) {
        $instance->save();
    });
}

但是您可以使用微查询添加它:

DB::query()->macro('firstOrCreate', function (array $attributes, array $values = [])  
{
   if ($record = $this->first()) {
      // return model instance
   }

   // create model instance
});

因此,您将可以像使用Eloquent一样调用它。

$record= DB::table('records')->where('alias', $alias)->firstOrFail();

答案 1 :(得分:0)

带有空值的

updateOrInsert 函数给我的结果类似于 firstOrCreate

答案 2 :(得分:-2)

是的,当然!只需使用普通的SQL和->selectRaw( your conditions ),然后查看是否存在您的规范所在的条目即可。

https://laravel.com/docs/5.7/queries#raw-expressions