由于Laravel Eloquent中有firstOrCreate()
,我想知道是否有一个函数可以创建一条记录,或者如果它存在,则更新当前记录?
还是我必须自己写?
我在文档中找不到任何东西,但这不是第一次了,我在文档之外的地方找到了关于雄辩的东西。
将以下方法添加到您的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;
}
您需要在更新模型之前找到它,对吗?您不能仅仅调用Model::firstOrUpdate($newAttributes)
,因为数据库中没有具有此类(新)属性的模型。
也就是说,您必须知道某个模型的唯一属性,例如< code>id。之后,您可以获取它并使用新属性调用< code>update方法:< code>Model::firstOrNew(['id' =
如您所见,这段代码非常短,但当然,如果您愿意,您可以将其放入方法中。
你差点就命名了。:)
$instance = Model::updateOrCreate(['id' => $id], $newAttributes);
如果$id
为 null,则将创建并保存一个新实例,否则将对其进行更新。
目前,我正在用一个查询检查该项是否存在,然后使用put或updateItem,我想更改它并对DDB进行一次调用。我想进行一个将更新或创建项目的查询。 下面是我的项目的一个例子: 项目类型: 如果项目存在,我想推送一个新项目,比如{papa:'dsfadsf'}(永远不要修改fa映射内的现有项目),并修改pa映射内的finish值 这是更新后的项目: 这是我尝试的,但不起作用
在Laravel5.1中,对于MySQL insert,我希望查看记录是否已经存在,并在重复时更新,如果不存在,则创建新记录。 我已经搜索了SO,答案是旧laravel版本。在一个旧的主题中,它说去年在core中添加了一个新的方法。但是当我尝试时,我得到了错误: 这是我使用的查询: 其中,是该表中唯一的外键,我想更新记录(如果存在)或创建一个新记录。我尝试搜索5.1文档,但找不到我需要的信息。有人
问题内容: 我是Elasticsearch的新手,目前正在实现用于搜索的过滤器。到目前为止,我的索引具有以下映射(我已经删除了一些字段): geo_distance字段将在location字段上实现,示例实例如下所示: 即采用geoJSON格式。 我了解我将必须更新索引,以使location字段的类型为,如文档(mapping-geo- point )中所述。似乎我必须删除索引并创建一个新索引,但
对于一个小的新项目,我决定尝试一下JDBI(通常我使用hibernate/jpa)。 我喜欢使用@SqlUpdate/@Sql Query创建轻量级、基于注释的dao。 但是:在某些情况下,我无法确定是要创建实体还是更新现有实体。我会放置一个“选择”语句,并根据其返回值使用插入或更新语句。 问题:jdbi中的“仅接口”道是否以某种方式支持这一点?还是我必须自己编写一个“createOrUpdate
问题内容: 我想创建一个模型对象,例如Person,如果不存在person的id,否则我将获得该person对象。 创建新人员的代码如下: 但是我不知道在哪里检查并获取现有的人对象。 问题答案: Django中已经有一个,https://docs.djangoproject.com/en/dev/ref/models/querysets/#get- or-create 对你来说可能是:
插入新记录或更新(如果存在)的缩写是什么?
问题内容: 我有一个条件,即StringBuilder会不断存储与大型平面文件(100兆字节)中的模式匹配的行。但是,达到条件后,我将StringBuilder变量的内容写入文本文件。 现在我想知道是否应该通过重置对象->使用相同的变量 要么 请提出就性能和OOM问题而言您认为哪个更好。 问题答案: 我认为通话仍然很昂贵,您应该这样做: 重置它。 更新: 查看完 源代码后 ,似乎完整保留了旧缓冲区
创建 var newRecord = {}; newRecord.id = 1; newRecord.name = "John" Person.create(newRecord, function(err, results) { ... }); 保存 Person.find({ surname: "Doe" }, function (err, people) { // SQL: "SEL