laravel foreach 循环遍历 Blade 中的数组

问题描述 投票:0回答:1

我有一个数组,我想在 foreach 循环的编辑模板中输出它。 但我收到错误无法访问字符串上字符串类型的偏移量

在刀片中我有这个:

@foreach ($post->cage as $c  )

    <div data-repeater-item="">
    
      <div class="form-group">
    
        <label class="col-sm-1 control-label">Make</label>

        <label class="col-sm-1 control-label">Comment</label>
        
        <div class="col-sm-2">
            <input type="text" name="cage[1][comment]" value="{{ $c['comment'] }}" class="form-control">
        </div>
        
      </div>
      
    </div>

@endforeach

控制器非常基础

/**
 * Show the form for editing the specified resource.
 */
public function edit(string $id): Response
{
    
    return response()->view('post.edit', [
        'post' => Posts::findOrFail($id),
    ]);
}

vardump 给出了这个

array(3) {   
    ["level"]=> string(6) "middle"
    ["comment"]=> string(4) "joe2"
    [0]=> array(2) {
        ["level"]=> string(6) "middle"
        ["comment"]=> string(4) "joe2" }
}

知道如何让 foreach 获取值吗? 我需要在控制器中添加一些东西吗?解码什么的? 预先感谢

额外编辑。 Cage是一个可以存储数组的文本字段

/**
 * Run the migrations.
 */
public function up(): void
{
    Schema::table('posts', function (Blueprint $table) {

$table->text('zone')->nullable();
    $table->text('cage')->nullable(); 
    });
}

在模型文件中

protected $casts = [
    'cage' => 'array'
];

edit2:将文本字段更改为 json 字段。通过数组的 foreach 循环现在工作正常。谢谢大家的帮助!

php arrays laravel foreach
1个回答
0
投票

解决方案是将您的列类型更改为

json
而不是
text
:更新您的
posts.cage
迁移:

$table->text('cage')->nullable();

至:

$table->json('cage')->nullable();

或者这个(如果你想总是有一个空数组作为默认值):

$table->json('cage')->nullable()->default('[]');

此外,我还可以建议在您的表单中添加一个键:

@foreach ($post->cage as $cageKey => $cage)
    <div data-repeater-item="{{$cageKey}}">
      <div class="form-group">
        <label class="col-sm-1 control-label">Make</label>
        <label class="col-sm-1 control-label">Comment</label>
        <div class="col-sm-2">
            <input type="text" name="cage[{{$cageKey}}][comment]" value="{{ $cage['comment'] }}" class="form-control">
        </div>
      </div>
    </div>
@endforeach
© www.soinside.com 2019 - 2024. All rights reserved.