【问题标题】:Eloquent updateOrCreate hide columns while updating雄辩的更新或更新时创建隐藏列
【发布时间】:2019-05-08 11:05:28
【问题描述】:

如果基于某些条件,表中已有记录可用,我正在使用updateOrCreate() 函数更新记录。但是,我不想更新包含唯一值的列之一。

我想对该列执行相同的操作,例如 created_at 正在工作 在创建记录值时添加到 created_at 列,但在更新时包含相同的值。

为防止出现此问题,我从模型中的 $fillable 中删除了该列名称。但是,在这种情况下,它不会向该列添加任何值。

protected $fillable = ['uid', 'channel', 'updated_at'];

$data = [
    'uid' => Helper::generateUid(),
    'channel' => $info['channel'],
    'created_at' => time(),
    'updated_at' => time(),
];

$cond = ['channel' => $info['channel']];

$isAdded = Templates::updateOrCreate($cond, $data);

预期结果 如果详细信息已经存在,我不想更新 uid 列。

实际结果 如果没有详细信息,它也会为 uid 列和其他列添加值,如果有详细信息,那么它也会更新 uid 列。

【问题讨论】:

    标签: php laravel laravel-5 eloquent


    【解决方案1】:

    updateOrCreate 方法无法做到这一点。你需要稍微明确一点。您可以使用firstOrNew 方法来检索或实例化一个新对象。然后您可以使用exists 属性来确定它是现有对象还是新对象。

    $template = Templates::firstOrNew(['channel' => $info['channel']]);
    
    if (!$template->exists) {
        $template->uid = Helper::generateUid();
    }
    
    $template->save();
    

    我省略了 created_atupdated_at 字段,因为它们是由 Laravel 自动处理的。

    【讨论】:

      猜你喜欢
      • 2018-05-19
      • 1970-01-01
      • 2013-05-31
      • 2020-05-30
      • 2020-12-12
      • 2020-12-03
      • 2020-02-14
      • 1970-01-01
      • 2017-04-28
      相关资源
      最近更新 更多