Запретить сохранение пустых строк в базу данных - PullRequest
0 голосов
/ 26 октября 2018

В настоящее время у меня есть вход, в котором пользователь должен писать теги и разделять их запятыми. Затем на серверном конце строка разбирается и каждый тег сохраняется в базе данных. Однако, если я не пишу какие-либо теги, тег с именем пустой строки сохраняется в базе данных. Как я могу избежать этого?

HTML

<div class="form-group">
    <label class='label' for="artwork-tags">Tags</label>
    <input class='input' type="text" name="artwork-tags" placeholder="Tags" value='{{ Request::old('artwork-tags') }}'>
    @include('partials.invalid', ['field' => 'artwork-tags'])
</div>

PHP

$tagsRaw = $request->input('artwork-tags');
$tags = explode(',', $tagsRaw);

foreach($tags as $tagName) {
    $tagExists = Tag::where('name', $tagName)->exists();
    if (!$tagExists) {
        $tag = new Tag();
        $tag->name = $tagName;
        $tag->save();
        $image->tags()->attach($tag);
    } else {
        $existingTag = Tag::where('name', $tagName)->first();
        $image->tags()->attach($existingTag);
    }
}

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

У объекта Request есть способ проверить, является ли значение пустой строкой или нет.Примерно так будет работать нормально:

$tags = $request->filled("artwork-tags") ? explode(',', $request->input("artwork-tags")) : [];

Цикл foreach не будет затронут пустым массивом, переданным ему.


Из документации:

Если вы хотите определить, присутствует ли значение в запросе и не является ли оно пустым, вы можете использовать метод «заливки»:

    if ($request->filled('name')) {
       //
    }

https://laravel.com/docs/5.6/requests#retrieving-input

0 голосов
/ 26 октября 2018

Вы можете проверить, не является ли $tagsRaw не пустым:

if( ! empty($tagsRaw = $request->input('artwork-tags')))
{
    $tags = explode(',', $tagsRaw);
    foreach($tags as $tagName) {
        $tagExists = Tag::where('name', $tagName)->exists();
        if (!$tagExists) {
            $tag = new Tag();
            $tag->name = $tagName;
            $tag->save();
            $image->tags()->attach($tag);
        } else {
            $existingTag = Tag::where('name', $tagName)->first();
            $image->tags()->attach($existingTag);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...