Eloquent updateOrCreate скрыть столбцы при обновлении - PullRequest
0 голосов
/ 07 мая 2019

Я использую функцию updateOrCreate() для обновления записи, если запись уже доступна в таблице на основании какого-либо условия.Однако я не хочу обновлять один из моих столбцов, который содержит уникальное значение.

Я хочу выполнить то же действие для этого столбца, как created_at, при создании значения записей добавляется в *Столбец 1005 *, но при обновлении он содержит то же самое.

Чтобы избежать этой проблемы, я удалил имя этого столбца из $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.

1 Ответ

1 голос
/ 07 мая 2019

Вы не можете сделать это с помощью метода updateOrCreate. Вам нужно быть немного более явным. Вы можете использовать метод firstOrNew для извлечения или создания нового объекта. И затем вы можете использовать свойство exists, чтобы определить, является ли это существующим или новым объектом.

$template = Templates::firstOrNew(['channel' => $info['channel']]);

if (!$template->exists) {
    $template->uid = Helper::generateUid();
}

$template->save();

Я пропустил поля created_at и updated_at, потому что они автоматически обрабатываются Laravel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...