从控制器到视图的空数组-Laravel

时间:2019-03-15 14:24:21

标签: php laravel

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

这是我的传递了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中的所有内容均不会呈现。我看不到问题。

3 个答案:

答案 0 :(得分:1)

在您的控制器中:

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

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

此外,如果您要编辑线模型,则不需要:

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

您只需要此即可找到您的模型:

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

答案 1 :(得分:0)

在您的控制器中尝试:

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

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

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

答案 2 :(得分:-1)

问题似乎出在控制器代码中。

$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();