Laravel - Вставка пустого значения в базу данных - PullRequest
0 голосов
/ 28 ноября 2018

Здравствуйте. Я хотел бы вставить нулевое значение в свою базу данных, но я понятия не имею, как это сделать, выдает ошибку

Как вставить пустое значение для ввода текста и установить его в null для базы данных, поскольку я делаю это, я имею ошибку, потому что у строк базы данных нет значения.Как я могу сделать это без ошибки.

вот моя ошибка

Как вы можете видеть, у меня есть цикл foreach, поэтому вставка 1 вводатекстовое значение ничего не возвращает в базу данных.

SQLSTATE [23000]: нарушение ограничения целостности: 1048 Заголовок столбца не может быть пустым (SQL: вставить в awards (title, description, awards_image, updated_at, created_at) значения (,, a: 0: {}, 2018-11-28 10:29:35, 2018-11-28 10:29:35))

my Контроллер

public function store(Request $request)
{
    $this->validate($request, [
        'title' => 'nullable',
        'description' => 'nullable',
        'awards_image.*' =>  'image|nullable|max:1999'
    ]);
    $awards = [];
    if ($request->has('awards_image'))
    {   
        //Handle File Upload


        foreach ($request->file('awards_image') as $key => $file)
        {
            // Get FileName
            $filenameWithExt = $file->getClientOriginalName();
            //Get just filename
            $filename = pathinfo( $filenameWithExt, PATHINFO_FILENAME);
            //Get just extension
            $extension = $file->getClientOriginalExtension();
            //Filename to Store
            $fileNameToStore = $filename.'_'.time().'.'.$extension;
            //Upload Image
            $path = $file->storeAs('public/awards_images',$fileNameToStore);
            array_push($awards, $fileNameToStore);
        }

        $fileNameToStore = serialize($awards);
    }
    else
    {
        $fileNameToStore='noimage.jpg';
    }


foreach ($awards as $key => $values) {
            $awardsContent = new Award;
            $awardsContent->title = $request->title[$key];
            $awardsContent->description = $request->description[$key];
            $awardsContent->awards_image = $values;
            $awardsContent->save();
            }

}

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Если вы не хотите менять таблицу, попробуйте следующее:

foreach ($awards as $key => $values) {
        $awardsContent = new Award;
        $awardsContent->title = !empty($request->title[$key]) ? $request->title[$key] : '';
        $awardsContent->description = $request->description[$key];
        $awardsContent->awards_image = $values;
        $awardsContent->save();
        }

}

Дополнительная информация в empty():

http://php.net/manual/en/function.empty.php

Если вырады поменять таблицу и создать миграцию, где она находится на

Schema::table('awards', function(Blueprint $table) {

    $table->string('title')->nullable()->change();

});

Конечно, вам придется изменить это на то, что у вас уже есть, но важной частью является ->nullable()->change(); остальная часть строкидолжно совпадать с исходной миграцией.

Дополнительная информация об изменениях миграции:

https://laravel.com/docs/5.7/migrations#modifying-columns

Надеюсь, это поможет

0 голосов
/ 28 ноября 2018

Создание новой миграции

php artisan make:migration fix_title_in_table_awards --table=awards

Затем в созданной миграции сначала отбросьте столбец, а затем заново создайте столбец, сделав его обнуляемым.

Schema::table('awards', function (Blueprint $table) {
    $table->dropColum('title');
});

Schema::table('awards', function (Blueprint $table) {
    $table->string('title')->nullable();
});

Позаботьтесь об этом действиипотому что вы потеряете все данные в этом столбце ... возможно, вы сможете скопировать фактические значения заголовка в другой столбец, пока не внесете изменения ...

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