未定义的属性:Laravel 5.2中的Illuminate \ Support \ Collection :: $ id

时间:2017-01-29 00:01:05

标签: php mysql laravel laravel-5 laravel-5.2

我有困惑,需要帮助才能解决。

我正在尝试将记录添加到依赖于初始记录的表中,它是与呼叫记录的初始注册相关的事件日志表。

当我尝试这样做时,它隐藏了一个输入,但它没有收到id,它会产生以下错误(Undefined property:Illuminate \ Support \ Collection :: $ id)。

这是视图的一部分,带有事件的记录按钮。

@foreach ($data as $call)
<tr class="active">
    <td align="center">{{ ++$i }}</td>
    <td style="text-align: center">{{ $call->created_at->format('d - m - Y') }}</td>
    <td>{{ $call->name }}</td>
    <td>{{ $call->last_name }}</td>
    <td align="center">
        @if($call->type == 1)         
            <span class="label label-info">Saliente</span>        
        @else         
            <span class="label label-success">Entrante</span>        
        @endif
    </td>
    <td>{{ $call->phone }}</td>
    <td>{{ $call->movil }}</td>
    <td align="center">

        <a class="btn btn-info btn-xs" href="{{ route('calls.show',$call->id) }}" data-toggle="tooltip" rel="tooltip" data-placement="top" title="Detalle de llamada"> <i class="material-icons">info_outline</i> </a>

        @permission('role-edit')
        <a class="btn btn-primary btn-xs" href="{{ route('calls.edit',$call->id) }}" data-toggle="tooltip" data-placement="top" title="Editar registro de llamada"> <i class="material-icons">create</i> </a>
        @endpermission

        <a class="btn btn-warning btn-xs" href="{{ route('comments.create', $call->id) }}" data-toggle="tooltip" rel="tooltip" data-placement="top" title="Registrar incidencia"> <i class="material-icons">event</i> </a>

        {!! Form::open(['method' => 'DELETE','route' => ['calls.destroy', $call->id],'style'=>'display:inline']) !!}

            @permission('role-delete')
            <button type="submit" class="btn btn-danger btn-xs" data-toggle="tooltip" data-placement="top" title="Eliminar llamada"><i class="material-icons delete-white">delete</i></button>
            @endpermission

        {!! Form::close() !!}
    </td>
</tr>
@endforeach

这是记录问题的视图的一部分,但我需要在隐藏字段中传递id。

{!! Form::open(array('route' => 'comments.store','method' => 'POST')) !!}

    <div class="col-md-12 col-xs-12">
        <div class="input-group">
            <div class="col-md-4 col-xs-4">
                {!! Form::select('call_id', $calls, null, ['class' => 'form-control', 'placeholder' => 'Seleccionar cliente']) !!} <!--This is the select-->

                {{ Form::hidden('call_id', $calls->id) }} <!--This is the hidden mode-->
            </div>
            <div class="col-md-8 col-xs-8">
                {!! Form::text('name', null, array('placeholder' => 'Registrar incidencia','class' => 'form-control')) !!}
            </div> 
            <span class="input-group-btn">                  
                <button type="submit" class="btn btn-success btn-xs" data-toggle="tooltip" rel="tooltip" data-placement="top" title="Guardar">
                    <i class="material-icons">save</i>
                </button> 
            </span>
        </div>
    </div>

{!! Form::close() !!}

视图生成的错误是:

Undefined property: Illuminate\Support\Collection::$id

这些是我的控制器方法(CommentController)。

public function create()
    {
        $calls = Call::orderBy('id', 'asc')->lists('name', 'id');

        return view('comments.create', compact('calls'));
    }


public function store(Request $request)
{
    //return $request->all();

    $this->validate($request, [
      'name'        => 'required|unique:categories|max:255',
    ]);

    $comments = Comment::create([
        'name'          => $request->get('name'),
        'call_id'       => $request->get('call_id'),
    ]);

    return redirect()->route('comments.index')
                    ->with('success','Comentario agregado correctamente!!!');
}

这是我的路线方法。

Route::resource('comments','CommentController');

这是通话记录视图,单击橙色按钮时会调用注释视图来记录问题。

enter image description here

这是事件记录的视图,这里我有下拉列表,但理想情况下,而不是下拉列表可以接收您从上一个视图中选择的记录的ID。

enter image description here

可以指导我的人,因为我使用了多种方法而且我无法解决它。

2 个答案:

答案 0 :(得分:1)

lists方法返回一个集合实例。您需要使用all方法将Collection转换为普通数组。

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

$ calls = Call :: orderBy('id','asc') - &gt; lists('name','id') - &gt; all();

您可以在以下链接The lists Method

中详细了解相关信息

如果您的问题得到解决,请告诉我。

答案 1 :(得分:1)

解决混淆和方法如下:

在视图中创建事件的按钮我将其定义如下:

@foreach ($data as $call)

<a class="btn btn-warning btn-xs" href="{{ route('comments.create', ['id' => $call->id]) }}" data-toggle="tooltip" rel="tooltip" data-placement="top" title="Registrar incidencia"> <i class="material-icons">event</i> </a>

@endforeach

在CommentController的create方法中,我将其结构如下:

public function create($id)
{
    $calls = DB::table('calls')->find($id);

    return view('comments.create', compact('calls'));
}

CommentController的store方法我将其结构如下:

public function store(Request $request)
{
    //return $request->all();

    $rules = [
        'call_id'                   => 'required',
        'comments_name'             => 'required',
    ];

    $messages = [
        'call_id.required'           => 'Debe seleccionar un código de llamada',
        'comments_name.required'    => 'Debe ingresar incidencia',
    ];

    $this->validate($request, $rules, $messages);       

    $comments = Comment::create([
        'comments_name'     => $request->get('comments_name'),
        'call_id'           => $request->get('call_id'),
    ]);

    return redirect()->route('calls.index')
                    ->with('success','Incidencia agregada correctamente!!!');
}

视图创建事件中的标签如下:

{!! Form::open(array('route' => 'comments.store','method' => 'POST')) !!}

    <div class="col-md-12 col-xs-12">
        <div class="input-group">
            <div class="col-md-12 col-xs-12">
            {!! Form::text('comments_name', null, array('placeholder' => 'Nombres','class' => 'form-control')) !!} 
            {{ Form::hidden('call_id', $calls->id) }}
            </div> 
            <span class="input-group-btn"> 
                <a class="btn btn-warning btn-xs" href="{{ route('calls.index') }}" data-toggle="tooltip" rel="tooltip" data-placement="top" title="Retornar">
                    <i class="material-icons">arrow_back</i>
                </a>   

                <button type="submit" class="btn btn-success btn-xs" data-toggle="tooltip" rel="tooltip" data-placement="top" title="Guardar">
                    <i class="material-icons">save</i>
                </button> 
            </span>
        </div>
    </div>

{!! Form::close() !!}

我在routes文件中定义了以下路由:

Route::get('comments/create/{id}', [
    'middleware' => 'auth',
    'as' => 'comments.create',
    'uses' => 'CommentController@create'
]);

通过这种方式,您可以创建一个包含许多事件列表的呼叫记录。

如果应该改进这种方法,请给我建议,但这是我可以做到的方式。

感谢@RobFonseca和@CarlosAdames的意见和帮助。