用属性实例化一个已经存在于数据库中的雄辩模型?

Posted

技术标签:

【中文标题】用属性实例化一个已经存在于数据库中的雄辩模型?【英文标题】:Instantiate a eloquent Model that alrready exists in the database with attributes? 【发布时间】:2016-11-19 12:55:39 【问题描述】:

目前我在数组中有属性,但该模型已经存在于表中,如何在不再次查询的情况下实例化模型,以便我可以使用这些函数。我知道有办法。请指出我正确的方向。以下是我目前拥有的模型的一些值的数组结构。

"url" => null
  "is_default" => 1
  "is_verified" => 2
  "verification_token" => null

【问题讨论】:

只需创建一个实例如$model = new YourModel(['url' => '']); 但这会创建一个新实例,这意味着当我们调用 save 时它会插入新行 所以不要调用 save 然后问题就解决了。 您的代码是否知道数据库中现有记录的“id”? 数据存在我只需要模型实例 【参考方案1】:

终于明白了 我们可以通过值来实例化模型

$model = new YourModel(['name' => 'foo', 'other_attribute'=>3], false);

我们可以传递第二个参数为 false,表示它存在于数据库中

【讨论】:

【参考方案2】:

我认为您正在寻找firstOrNewfirstOrCreate 方法。 (Laravel 5.2 reference)

这两种方法都将尝试使用给定的列/值对来定位数据库记录。但是firstOrNew不会将数据插入数据库,需要手动调用save()方法。

firstOrNew 方法,如 firstOrCreate 将尝试在数据库中查找与给定属性匹配的记录。但是,如果没有找到模型,则会返回一个新的模型实例。请注意,firstOrNew 返回的模型尚未持久化到数据库中。您需要手动调用 save 来保存它:

【讨论】:

但我不想查询只是实例化模型

以上是关于用属性实例化一个已经存在于数据库中的雄辩模型?的主要内容,如果未能解决你的问题,请参考以下文章

雄辩的条件更新

laravel:雄辩的例子将数据插入数据库

我的 Django 模型中的一个字段已经存在于 PostgreSQL 数据库中

django(python)的模型字段类的实例化问题,新手请教。

Laravel 通过属性获得雄辩的查询构建器关系

c++实例化一个对象