Eloquent具有firstOrCreate
方法,该方法根据条件获取模型,如果不存在则创建模型。
Laravel的查询生成器中是否有任何等效方法(即,不是Eloquent中的方法)?例如:
$row = DB::table('users')->where('user_id', 5)->firstOrCreate('name' => 'Peter', 'last_name' => 'Pan');
这将尝试使用users
从'user_id'==5
中获得一行。如果不存在,它将插入具有该ID号的行以及其他提到的字段。
编辑:我不打算对用户提出问题。我以用户为例,尽可能明确我要寻找的内容。
答案 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 )
,然后查看是否存在您的规范所在的条目即可。