doumaji6215
2015-10-24 14:13 阅读 76
已采纳

Laravel错误:从空值创建默认对象

I'm trying to update a record in the database . I'm trying to update an already registered product, then I do the research and then create several objects to save , the problem that laravel returns an error mesage warning that I am trying to create an object with a null value , and I'm passing a value for he. Follows the code below

enter image description here

Model

enter image description here

I can't resolve this error, i need some help!!!

public function edit()
{
    $idProduct = Input::get('pid');

    $produto = ProductModel::where('id', $idProduct)->first();

    $nome = Input::get('eNome');
    $descricao = Input::get('eDescricao');
    $userID = Auth::user()->id;

    $produto->nome = $nome;
    $produto->descricao = $descricao;
    $produto->users_id = $userID;

    if (Input::hasFile('eFoto'))
    {
        $file = Input::file('eFoto');

        $fileNameUniq = uniqid();
        $destinationPath = public_path().'assets/admin/gallery/';


        $extension = pathinfo($file->getClientOriginalName(), PATHINFO_EXTENSION);

        $fileName = uniqid();
        if(move_uploaded_file($file, 'assets/admin/gallery/'.$fileName.'.'.$extension)){
            $produto->foto = $fileName.'.'.$extension;
        }

    }

    $produto->save();

    return Redirect::back()->with(['message' => 'Produto alterado com sucesso!']);
}

Routes:

Route::resource('/produto','admin\ProductController@index',['only' => 'index']);
Route::get('/produto/editar/ativar','admin\ProductController@activeProduct',['only' => 'activeProduct']);
Route::get('/produto/editar/desativar','admin\ProductController@disableProduct',['only' => 'disableProduct']);
Route::get('/produto/editar/{id}', array('as' => 'editProduct', 'uses' => 'Admin\ProductController@editProduct'));
Route::get('/produto/excluir','admin\ProductController@destroy',['only' => 'destroy']);
Route::any('/produto/add','admin\ProductController@store',['only' => 'store']);
Route::post('/produto/editar','admin\ProductController@edit',['only' => 'edit']);

View

<div class="modal">
              <div class="modal-dialog">
                <div class="modal-content">
                  <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                    <h4 class="modal-title">Editar produto</h4>
                  </div>
                  <div class="modal-body">
                    <link href="http://fonts.googleapis.com/css?family=PT+Sans+Narrow:400,700" rel='stylesheet' />

                    <!-- The main CSS file -->
                    <link href="{{URL::asset('/')}}assets/admin/uploader/css/style.css" rel="stylesheet" />
                    <!--<form id="upload" method="post" action="app\controllers\admin\GalleryController@store" enctype="multipart/form-data">-->

                    {!! Form::open(['id' => 'product', 'method' => 'POST', 'enctype' => 'multipart/form-data', 'files' => true, 'action' => 'admin\ProductController@edit']) !!}
                        <div class="clearfix">
                            {!! Form::text('eNome', $eProduct->nome,['class' => 'form-control', 'required' => 'required']) !!}
                        </div>
                        <br>
                        <div class="row">
                            <div class="form-group foto col-xs-12">
                                <label>Foto atual: <a href="{{URL::asset('/')}}assets/admin/gallery/{{$eProduct->foto}}"><img src="{{URL::asset('/')}}assets/admin/gallery/{{$product->foto}}" width="100%" height="300px" class="user-image" alt="Imagem"/></a></label>
                                <br>
                                <label>Selecione uma nova foto:</label>
                                <input class="form-control" type="file" name="eFoto" value="" />
                            </div>
                        </div>
                        <br>
                        <div class="clearfix">
                            {!! Form::textarea('eDescricao', $eProduct->descricao,['class' => 'form-control', 'placeholder' => 'descricao', 'required' => 'required']) !!}
                        </div>
                        <br>

                   {!! Form::close() !!}
                  </div>
                  <div class="modal-footer">
                    <!--<button type="button" class="btn btn-default pull-left" data-dismiss="modal">Fechar</button>-->
                     <a class="btn btn-success pull-left"  href="{{URL::to('/yziadmin/produto')}}">Fechar</a>
                    {!! Form::hidden('pid', $eProduct->id) !!}
                    {!! Form::submit('Salvar', ['name'=>'btnsave', 'class'=>'btn btn-success pull-right', 'form'=>'product']) !!}
                    <!--<button type="button" class="btn btn-primary">Finalizar</button>-->
                  </div>
                </div><!-- /.modal-content -->
              </div><!-- /.modal-dialog -->
            </div><!-- /.modal -->
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    douwang9650 douwang9650 2015-10-24 15:07

    put your

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

    under your

    {!! Form::hidden('pid', $eProduct->id) !!}
    

    so it will be posted as well.

    点赞 评论 复制链接分享
  • dongyi6543 dongyi6543 2015-10-24 14:48

    use find instead of first.

    $produto = ProductModel::find($idProduct);
    $produto->name = $name;
    $produto->save(); 
    

    if you want to use update

     $produto = ProductModel::where('id', $idProduct)->update([your input content]);
    
    点赞 评论 复制链接分享

相关推荐