PHP: обновлять поля ТОЛЬКО при наличии замены. Если нет, оставайтесь нетронутыми - PullRequest
1 голос
/ 12 февраля 2020

Я думаю, что это классический, но в одном из моих Laravel контроллеров мне нужно обновить значение ТОЛЬКО для некоторых полей, если во входящем запросе присутствуют соответствующие замещающие значения. Если их нет, они должны остаться нетронутыми. Моя «самая умная» попытка на данный момент:

$user->name = $request->name ?: $user->name;
$user->email = $request->email ?: $user->email;
...

Есть ли более разумный способ сделать это, используя последние улучшения PHP или Laravel? Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 12 февраля 2020

Вы можете использовать метод get() для запроса и передать текущее значение в качестве значения по умолчанию.

$user->name = $request->get('name', $user->name);
0 голосов
/ 12 февраля 2020

Обычно в методе Laravel controller update вы передаете весь массив атрибутов модели в $request. Вас беспокоит то, что пустое / пустое значение, присутствующее в этом массиве, автоматически обновит столбец базы данных до нуля.

Не беспокойтесь, sometimes правило проверки - ваш друг.

public function update(Request $request, Model $model) 
{
    $validated = $request->validate([
        'name' => 'sometimes|string',
        'email' => 'sometimes|email',
        // ...
    ]);

    $model->update($validated);
}
0 голосов
/ 12 февраля 2020

Вы также можете использовать троичный оператор и просто проверить, не является ли $ request-> name пустым или пустым.

Примерно так:

$user->name = (($request->name === NULL) ? $user->name : $request->name);

...