Laravel first或New如何检查它是第一个还是新的?

2022-08-30 08:36:58

我正在使用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
}

答案 1

firstorNew()

此函数将从数据库中返回第一条记录,或实例化数据库中尚不存在的新模型实例。因此,如果要检查实例是从数据库拉取的,或者它是否是新实例,则可以检查模型上的属性(不是函数)。exists

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()

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

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

答案 2

您可以检查您的用户是否是最近创建的。

if ($user->wasRecentlyCreated) {
    // new user
} else {
    // user already exists
}

(来源:Thomas Kim来自这个答案)


推荐