由于在Laravel Eloquent中有firstOrCreate()
,我想知道是否有可以创建记录的函数或者是否存在,更新当前的记录?创建或更新 - Laravel 4.1
或者我需要自己写一个吗?
我在文档中找不到任何东西,但这不是第一次,我发现了有关其他地方的文章,而不是文档。
由于在Laravel Eloquent中有firstOrCreate()
,我想知道是否有可以创建记录的函数或者是否存在,更新当前的记录?创建或更新 - Laravel 4.1
或者我需要自己写一个吗?
我在文档中找不到任何东西,但这不是第一次,我发现了有关其他地方的文章,而不是文档。
您需要在更新之前找到模型,对吧?你不能仅仅因为在这个(新的)属性的数据库中没有模型而仅仅调用Model::firstOrUpdate($newAttributes)
。
I.e。您必须知道某个模型的独特属性,例如id
。在此之后,您可以获取它并使用新属性调用update
方法:Model::firstOrNew(['id' => $id])->update($newAttributes)
。 $id
这里可以是null
,在这种情况下,新模型将被实例化(但不保存)。你可以看到,这段代码非常短,但是当然,如果你愿意的话,你可以把它放到方法中去。
更直接和DRY会是下面的方法添加到您的BaseModel:
public function write($input, $key = 'id')
{
// Instantiate new OR existing object
if (! empty($input[$key]))
$resource = $this->findOrFail($input[$key]);
else
$resource = $this; // Use a clone to prevent overwriting the same object in case of recursion
// Fill object with user input using Mass Assignment
$resource->fill($input);
// Save data to db
if (! $resource->save())
App::abort(500, 'Could not save resource');
return $resource;
}
这是不好做的模型类中的http相关 – neoascetic
然后把它放在你的BaseController上... –
你几乎把它命名。 :)
$instance = Model::updateOrCreate(['id' => $id], $newAttributes);
如果$id
为null,则一个新的实例将被创建并保存,否则将被更新。
ahh,我明白了,谢谢 – Jazerix