首页 > 解决方案 > 更新或创建条件数据作为输入

问题描述

我有这段代码,这会导致两个查询。

$profile = $profile_class::updateOrCreate([
        'user_id' => $user->id,
    ], 
    [
        'data' => $profile_data,
]);

if($request->type == 'volontario' && $request->filled('association_id')) {
        $profile->association_id = $request->association_id;
        $profile->association_token = uniqid(md5($user->id));
        $profile->save();
}

有什么方法可以只对数据库执行一个查询吗?

标签: mysqllaraveleloquentrefactoring

解决方案


您可以更改应更新的数据,具体取决于您的请求是否处于正确状态。为此,association_idassociation_token应该是可填充的。

$fillData = [
    'data' => $profile_data,
];

if($request->type == 'volontario' && $request->filled('association_id')) {
    $fillData['association_id'] = $request->association_id;
    $fillData['association_token'] = uniqid(md5($user->id));
}

$profile = $profile_class::updateOrCreate([
        'user_id' => $user->id,
    ],
    $fillData
);

推荐阅读