Laravel新增表单字段后出现Undefined property属性未定义报错求助
Laravel新增表单字段后出现Undefined property错误解决方法
我是Laravel新手,接手相关工作后,给表单新增字段时出现Undefined property: stdClass::$showFooterWidgetOne错误,相关代码如下:
<label>Footer Widget 1 </label> <div class="input-group"> <div class="input-group-addon"> <i class="fa fa-pencil"></i> </div> <select name="showFooterWidgetOne" class="form-control"> <!----------- error part -----------> <option value="Yes" <?php if($SRow->showFooterWidgetOne == 'Yes'): echo 'selected'; endif;?>>Yes</option> <option value="No" <?php if($SRow->showFooterWidgetOne == 'No'): echo 'selected'; endif;?>>No</option> </select> </div> </div> <!-- /.form-group -->
以下是解决该问题的具体步骤:
检查数据库表结构
确认对应的数据表已添加showFooterWidgetOne字段,字段类型可设为VARCHAR(3)或ENUM('Yes','No'),建议设置默认值(如Yes),确保新老数据都有该字段的有效值。确认查询逻辑包含该字段
- 若使用DB门面查询,比如
DB::table('settings')->select('id', 'xxx'),需把showFooterWidgetOne加入到查询字段列表中; - 若使用Eloquent模型,需确保模型的
$fillable数组包含showFooterWidgetOne(或者设置$guarded = []),同时查询时不要通过select()方法排除该字段。
- 若使用DB门面查询,比如
模板层添加容错处理
为避免因属性不存在导致报错,可在模板中增加判断逻辑,修改后的代码示例:<option value="Yes" {{ isset($SRow->showFooterWidgetOne) && $SRow->showFooterWidgetOne == 'Yes' ? 'selected' : '' }}>Yes</option> <option value="No" {{ isset($SRow->showFooterWidgetOne) && $SRow->showFooterWidgetOne == 'No' ? 'selected' : '' }}>No</option>也可以使用Laravel自带的
optional()辅助函数简化代码:<option value="Yes" {{ optional($SRow)->showFooterWidgetOne == 'Yes' ? 'selected' : '' }}>Yes</option> <option value="No" {{ optional($SRow)->showFooterWidgetOne == 'No' ? 'selected' : '' }}>No</option>为存量数据填充默认值
如果数据库中已有数据行没有showFooterWidgetOne的值,可通过SQL语句批量设置默认值:UPDATE your_table_name SET showFooterWidgetOne = 'Yes' WHERE showFooterWidgetOne IS NULL;注意替换
your_table_name为实际的数据表名称。
内容的提问来源于stack exchange,提问作者Ash
相关产品推荐
相关产品推荐

