php - Laravel firstOrNew 如何检查它是第一个还是新的?

标签 php laravel laravel-5 eloquent

我正在使用 Laravel 的函数 firstOrNew() 来创建新用户或查找并更新现有用户。

创建对象后,如何知道它之前是否存在或是否是新对象?

思路是这样的:

$user = \App\User::firstOrNew([
    'email' => $userData->getEmail(),
    'name' => $userData->getName(),
]);

if ($user->new) { // some way to check
    // user was created now
} else {
    //user already existed
}

最佳答案

firstOrNew()

此函数将从数据库中返回第一条记录,或者实例化数据库中尚不存在的新模型实例。因此,如果您想检查该实例是从数据库中提取的还是新实例,您可以检查 exists property (不是函数)模型。

if ($user->exists) {
    // user already exists and was pulled from database.
} else {
    // user created from 'new'; does not exist in database.
}

最初的问题是关于 firstOrNew() 的,但是很多人似乎也是为了 firstOrCreate() 而来的。 firstOrCreate() 不同,需要不同的检查。

firstOrCreate()

此函数将从数据库中返回第一条记录,或者在数据库中创建一条新记录并返回该记录。由于新创建的记录将存在于数据库中,因此您无法检查 exists 属性,因为它在这两种情况下都为真。但是,您可以检查 wasRecentlyCreated 属性。如果当前模型实例刚刚在数据库中创建,则此属性将为 true,如果它已经在数据库中,则为 false。

if ($user->wasRecentlyCreated) {
    // user just created in the database; it didn't exist before.
} else {
    // user already existed and was pulled from database.
}

关于php - Laravel firstOrNew 如何检查它是第一个还是新的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30686880/

相关文章:

php - 未定义的属性:Laravel 5.2 中的 Illuminate\Support\Collection::$id

PHP 正则表达式替换为原始值

php - 使用 Guzzle 进行 OpenSSL 身份验证

php - 使用部署在 CentOS 服务器上的 Latchet 框架时,无法从 webapp 的 JS 建立 websocket 连接

php - laravel 4 css 文件 404 未找到

laravel - 不使用 Artisan 的维护模式?

php - Laravel 表单请求 : bad method be called

php - 使用 php 从数据库输出数据的最佳方法是什么?

php - 如何嵌入 instagram 个人资料?

laravel - 如何使用新数据从惯性后调用重定向回惯性