我正在使用Laravel的function firstOrNew()创建一个新用户或查找并更新一个现有用户.

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

这个 idea 是这样的:

$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相关问答推荐

如何在WooCommerce HPOS订单列表中创建自定义过滤器?

为什么PHP输出\n而不是实际创建一个新元素?

为WooCommerce中的特定用户角色指定促销价格

如何使用URL链接(mdl)切换选项卡

Mysqli_stmt::Execute():结果字段元数据中存在过早的EOF

在特定订单状态更改时自定义WooCommerce订单发货项目

获取并判断WooCommerce用户订阅结束日期

PHP -多维数组到一维数组

通过访问单个产品页面更新WooCommerce产品元数据

删除了数组中的值,而不是多个数组

移动应用:在PHP中忽略Cookie?

带Redhat php curl的http_code 0

在WooCommerce中添加特定产品类型的百分比费用和固定费用

如何使用PHP从TXM(XML)标记中读取特定属性

订单完成后创建 WooCommerce 促销代码

在php中计算两个没有假期的日期之间的小时差

PHP 解析 XML 以获取多个深度的所有字符串值

避免在 WooCommerce 中多次触发挂钩函数

Shopware 6:无法在新的自定义插件中保存关联字段(媒体)

将样式文件或脚本引入WordPress模板