【问题标题】:Empty array from controller to view - Laravel从控制器到视图的空数组 - Laravel
【发布时间】:2019-08-06 15:50:28
【问题描述】:

我是 Laravel 的新手,在为我的应用程序设置更新时遇到了一些问题。我试图通过路由将 id 从视图传递到控制器以选择特定行,然后我需要从控制器传递到另一个视图。我知道我哪里做错了。

这是我通过 de id 的视图代码:

@forEach($line as $data)
    <tr>
        <td><a href="{{route('edit.line', ['id', $data->id])}}"><i class="icon ion-md-create"></i></a></td>
        <td>{{$data->name}}</td>
        <td>{{$data->time}}</td>
    </tr>
    @endforEach

路线如下:

Route::get('/lineEdit/{id}', 'LineController@formEdit')->name('edit.line')->middleware('auth');

这是来自路由的控制器函数:

  public function formEdit($id){
    $line = Line::find($id);
    $lineUp = Line::select('*')
              ->where('id', $line)->get();

    return view('lineEdit')->with('line', $lineUp);
}

这是将接收数组的视图部分:

<div class="card-body">
       @forEach($line as $data)
        <form method="POST" action="{{route('update.line', $data->id)}}">
            @csrf
            <div class="form-group row">

                <label for="name" class="col-md-4 col-form-label text-md-right">
                    {{__('Name')}}
                </label>

                <div class="col-md-8">
                    <input type="text" name="name" class="form-control {{$errors->has('name') ? 'is-invalid' : ''}}" value={{$data->name}} required autofocus >

                    @if($errors->has('name'))
                        <span class="invalid-feedback" role="alert">
                            <strong>{{$errors->first('name')}}</strong>
                        </span>
                    @endif
                </div>
            </div>
            <div class="form-group row">
                <label for="time" class="col-md-4 col-form-label text-md-right">
                    {{__('Time')}}
                </label>

                <div class="col-md-8">
                    <input type="number" name="time" class="form-control {{$errors->has('time') ? 'is-invalid' : ''}}" value={{$data->time}} required >

                    @if($errors->has('time'))
                        <span class="invalid-feedback" role="alert">
                            <strong>{{$errors->first('time')}}</strong>
                        </span>
                    @endif
                </div> 
            </div>

            <div class="form-group row mb-0">
                <div class="col-md-8 offset-md-4">
                    <button type="submit" class="btn btn-primary">
                        {{ __('Save') }}
                    </button>
                </div>
            </div>

        </form>
        @endforEach
    </div>

forEach 中的所有内容都不会渲染。我看不出问题。

【问题讨论】:

  • 您要加载一个Line 还是多个?另外,为什么你在控制器方法中使用了两次Line 模型?
  • 你的代码是多余的;您正在通过 id 查询 Line(通过 ::find($id)),然后调用本质上相同的查询,除了您不能在查询中使用 $line,因为它是 Model。你必须使用$line-&gt;id,但同样,这是多余的,因为你已经拥有$id,这将是同一件事......你想做什么?此外,如果您尝试编辑单个 Line,为什么要将其发送到 Collection 中的视图?只需删除@foreach() 循环和用于编辑$line 的控件...
  • @TimLewis 我需要我的用户查看当前数据并传递 id 以更新行。我删除了无用的查询并留下了 de find::($id) 和 forEach。我需要我的视图能够接收查询结果,并将 id 和新值传递回控制器。
  • @TimLewis 非常感谢你的帮助,除了你说的问题外,我在将 id 传递给控制器​​时有一个错字。现在它运行良好

标签: php laravel


【解决方案1】:

在你的控制器中试试这个:

public function formEdit($id){
    $line = Line::find($id);

    return View::make('lineEdit', compact('line'));
}

这应该将变量$line 传递给您的视图

【讨论】:

    【解决方案2】:

    在您的控制器中:

    public function formEdit($id){
        $line = Line::find($id);
        return view('lineEdit', compact('line'));
    }
    

    我使用 compact method 将 $line 变量发送到视图。

    另外,如果你想编辑 Line 模型,你不需要这个:

    $lineUp = Line::select('*')->where('id', $line)->get();
    

    你只需要这个来找到你的模型:

    $line = Line::find($id);
    

    【讨论】:

    • $line 是模型或 null 不是 id
    • 使用view(...)-&gt;with('line', $lineUp);view(..., compact('line')) 本质上是一样的,所以是的,他们正在将线传递给视图。
    • $lineUp 变量对我来说没有多大意义,我对他的问题的理解是他只想编辑一个模型。他正在将 id 与查询中的模型进行比较
    【解决方案3】:

    看起来问题出在控制器代码中。

    $line = Line::find($id);
    

    如果 a) $id 是一个整数 b) $id 是主键 c) 这个键存在于数据库中,则返回一个 Line 类的对象(只有一个对象!)

    因此,$line 要么为 null,要么为模型对象。下一个查询

    $lineUp = Line::select('*')->where('id', $line)->get();
    

    这两种情况都不会成功。

    据我了解,您的意图 $id 只是一个属性(因为您希望拥有一个对象集合)。所以,试试

    $lineUp = Line::select('*')->where('id', $id)->get();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-11
      • 2016-01-21
      • 2017-05-25
      • 2021-04-07
      • 2018-01-05
      • 2019-04-15
      • 2014-12-02
      • 1970-01-01
      相关资源
      最近更新 更多