Php Laravel 6-`未定义变量:值`首次出现唯一错误
在我第一次想从表中将数据保存到数据库时,会出现此错误 错误例外 未定义变量:值 因此,我必须从Php Laravel 6-`未定义变量:值`首次出现唯一错误,php,laravel,laravel-6,Php,Laravel,Laravel 6,在我第一次想从表中将数据保存到数据库时,会出现此错误 错误例外 未定义变量:值 因此,我必须从tinker或mysql 我的控制器 public function store(Request $request) { $validateData = $request->validate([ 'name_device_type' => 'required|max:255', 'signature' => 'Nullable'
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();
});
}
My 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() !!}
但是,如果表中有数据,此错误将消失,如果我删除所有数据并使表为空,此错误也将再次出现。在
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();
}
您可以获取表的最大“id”并向其中添加1,而无需获取整个记录:
...
// validation
$newdevicetypeId = DeviceType::max('id') + 1;
$GetnewdevicetypeId = sprintf('DT%04d', $newdevicetypeId);
// new DeviceType
...
有一个模型事件选项,可以在创建记录后设置此特定字段,使其具有自己的id以供使用。检查$id=DeviceType::getidDeviceTypes()代码>已计数。因此,如果(isset($id)&&count($id)>0){//将foreach循环代码放在这里,甚至对foreach代码使用花括号,这将更加清楚}
@Qirel分号没有终止循环,它仍然在迭代并将值分配给$value
。。。只是循环没有运行,因为它们没有要迭代的记录over@lagbox是什么让你认为没有记录?在他们添加数据后,它工作了,因为循环运行并且有一个$value
变量。。。当没有记录(空表-“第一次”)时,就没有可迭代的内容,因此永远不会有$value
变量created@Daedalus其中一个从OP那里获得更多信息会有所帮助。。。它可能只是想得到某个特定事物的最后一个记录,然后循环技术上做到了这一点。。。或者可能是该代码的一部分属于循环中,该循环意味着要在每个项目上运行,这些项目可能是打字错误/结构性问题您的答案确实删除了错误消息,但我有一个新问题,即数据没有保存到数据库中。$id
变量是否有一个集合或数组?你检查过了吗?如果没有,请在foreach
循环之前尝试dd($id)
。如果它是空的,那么您应该检查DeviceType::getidDeviceTypes()
以了解它不返回任何数据的原因。id
是创建迁移表时默认的bigincrement
Laravel。isDeviceType::getidDeviceTypes()
返回数组或集合?此代码仍然存在一个问题,即它总是返回DT0001
。显示DeviceType
模型的getidDeviceTypes
方法i添加它检查问题
...
// validation
$newdevicetypeId = DeviceType::max('id') + 1;
$GetnewdevicetypeId = sprintf('DT%04d', $newdevicetypeId);
// new DeviceType
...