Laravel 6 - ошибка «Неопределенная переменная: значение» в первый раз - PullRequest
0 голосов
/ 15 октября 2019

В первый раз, когда я хочу сохранить данные в базу данных из таблицы, появляется эта ошибка.

ErrorException Неопределенная переменная: значение

, поэтому я должен вручную ввестиданные из tinker или mysql

Мой контроллер

public function store(Request $request)

{

    $validateData = $request->validate([

        'name_device_type' => 'required|max:255',

        'signature' => 'Nullable'

    ]);



    $id = DeviceType::getidDeviceTypes();

    foreach ($id as $value);   // Error happend in this line.

    $lastdevicetypeId = $value->id;

    $newdevicetypeId = $lastdevicetypeId + 1;

    $GetnewdevicetypeId = sprintf('DT%04d', $newdevicetypeId);



    $devicetypes = new DeviceType();

    $devicetypes->idDeviceType = $GetnewdevicetypeId;

    $devicetypes->name_device_type = $request->input('name_device_type');

    $devicetypes->signature = $request->input('signature');

    $devicetypes->save();



    return redirect('/devicetypes')->with('success', 'New Device Type is added');

}

Моя таблица миграции

public function up()
    {
        Schema::create('device_types', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('idDeviceType');
            $table->string('name_device_type');
            $table->mediumText('signature');
            $table->timestamps();
        });
    }

Мой create.blade.php

{!! Form::open(['action' => 'DeviceTypesController@store', 'method' => 'POST']) !!}
        <div class="form-group">
            {!! Form::label('name_device_type', 'Type Device'); !!}
            {!! Form::text('name_device_type', '', ['class' => 'form-control', 'placeholder' => 'Type Device']); !!}
        </div>
        <div class="form-group">
            {!! Form::label('signature', 'Signature (Optional)'); !!}
            {!! Form::textarea('signature', '', ['id' => 'classic-ckeditor5', 'class' => 'form-control', 'placeholder' => 'Signature']); !!}
        </div>
        {{ Form::button('<i class="far fa-save"></i> Submit', ['type' => 'submit', 'class' => 'btn btn-info'] )  }}
    {!! Form::close() !!}

Модель

class DeviceType extends Model
{
    // Table Name
    protected $table = 'device_types';
    // Primary Key
    protected $primaryKey = 'idDeviceTypes';
    // Timestamps
    public $timestamps = true;

    public $incrementing = false;

    public static function getidDeviceType(){
        return $getidDeviceType = DB::table('device_types')->orderBy('id','desc')->take(1)->get();
    }
}

Но если в таблице есть данные, эта ошибка исчезнет, ​​также эта ошибка появится снова, если я удалю все данные и оставлю таблицу пустой.

Ответы [ 2 ]

3 голосов
/ 15 октября 2019

У вас есть точка с запятой сразу после определения цикла foreach: foreach ($id as $value);, и вы используете $value в следующей строке $lastdevicetypeId = $value->id;, которая выходит за рамки вашего цикла.

Выследует удалить ; после цикла foreach, изменить его на : и добавить endforeach; там, где вы хотите завершить цикл.

Пример:

foreach ($id as $value):
    $lastdevicetypeId = $value->id;
    $newdevicetypeId = $lastdevicetypeId + 1;
    $GetnewdevicetypeId = sprintf('DT%04d', $newdevicetypeId);

    $devicetypes = new DeviceType();
    $devicetypes->idDeviceType = $GetnewdevicetypeId;
    $devicetypes->name_device_type = $request->input('name_device_type');
    $devicetypes->signature = $request->input('signature');
    $devicetypes->save();
endforeach;

Или вы можете написать этот код как:

foreach ($id as $value){
    $lastdevicetypeId = $value->id;
    $newdevicetypeId = $lastdevicetypeId + 1;
    $GetnewdevicetypeId = sprintf('DT%04d', $newdevicetypeId);

    $devicetypes = new DeviceType();
    $devicetypes->idDeviceType = $GetnewdevicetypeId;
    $devicetypes->name_device_type = $request->input('name_device_type');
    $devicetypes->signature = $request->input('signature');
    $devicetypes->save();
}
2 голосов
/ 15 октября 2019

Вы можете получить максимальное значение 'id' таблицы и добавить 1 к ней, не имея необходимости захватывать целую запись:

...
// validation

$newdevicetypeId = DeviceType::max('id') + 1;

$GetnewdevicetypeId = sprintf('DT%04d', $newdevicetypeId);

// new DeviceType
...

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

...