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