Редактирование и обновление данных в Laravel

У меня проблемы с редактированием данных в Laravel. Вот кнопка, чтобы показать вид редактирования:

{{ Form::open(array('route' => array('edit_spk', 'id'=> $spk_data->id), 'method' => 'GET', 'style' => 'display:inline')) }}
<button class="btn btn-success btn-line btn-rect">
<i class="icon-pencil icon-white"></i> Edit
</button>
{{Form::close()}}

Вот маршрут:

Route::get('spk/edit/{id}', array('as'=>'edit_spk','uses'=>'SpkController@edit'));
Route::put('spk/update/{id}', array('as'=>'update_spk','uses'=>'SpkController@update'));

Вот контроллер:

public function edit($id){
$spk = Spk::find($id);
$spk->distribution_code=Input::get('distribution_code');
$spk->destination=Input::get('destination');
$spk->hlr=Input::get('hlr');
$spk->first_iccid=Input::get('first_iccid');
$spk->last_iccid=Input::get('last_iccid');
$spk->quantity=Input::get('quantity');
return View::make('modals.edit-spk', compact('spk'));
}

public function update($id) {
$rules = array(
'distribution_code' => 'required',
'destination' => 'required',
'hlr'=> 'required',
'first_iccid' => 'required',
'last_iccid' => 'required',
'quantity' => 'required'
);

$validator = Validator::make(Input::all(), $rules);

if ($validator->fails()) {
return Redirect::to('modals.edit-spk')->withErrors($validator);
} else {
// store
$update = Spk::find($id);
$update->distribution_code=Input::get('distribution_code');
$update->destination=Input::get('destination');
$update->hlr=Input::get('hlr');
$update->first_iccid=Input::get('first_iccid');
$update->last_iccid=Input::get('last_iccid');
$update->quantity=Input::get('quantity');
$update->save();

// redirect
Session::flash('message', 'Successfully updated SPK !');
return Redirect::to('spk_view');
}
}

А вот вид для обновления данных:

@extends('dashboard.dashboard')
@section('content')
@if (Session::has('message'))
<div class="alert alert-info">{{ Session::get('message') }}</div>
@endif
<h4> {{link_to('dashboard','Home');}} > {{link_to('spk_view','SPK');}} > Update SPK</h4><hr></hr>
<div class="panel panel-default">
<div class="panel-heading">
Update SPK
</div>
<div class="panel-body">
{{ Form::model($spk,array('method' => 'PUT', 'class'=>'form-horizontal','route'=>array('update_spk', $spk->id))) }}
<div class="form-group">
<label class="control-label col-lg-2">Distribution Code</label>
<div class="col-lg-4">
<div class="input-group">
<input class="form-control" name ="distribution_code" type="text" data-mask="M99/99/99/9999" />
<span class="input-group-addon">M99/99/99/9999</span>
</div>
</div>
<div class="col-lg-5">
{{ $errors->first('distribution_code',
'<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
Anda belum mengisi data dengan benar !
</div>
')  }}
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-2">Destination</label>
<div class="col-lg-3">
<input type="text" name="destination" class="form-control" />
</div>
<div class="col-lg-4">
{{ $errors->first('destination',
'<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
Anda belum mengisi data dengan benar !
</div>
')  }}
</div>
</div>

<div class="form-group">
<label class="control-label col-lg-2">HLR</label>
<div class="col-lg-3">
<input type="text" id="hlr" name="hlr" class="form-control" />
</div>
<div class="col-lg-4">
{{ $errors->first('hlr',
'<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert"aria-hidden="true">&times;</button>
Anda belum mengisi data dengan benar !
</div>
')  }}
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-2">First ICCID</label>
<div class="col-lg-3">
<input type="text" id="first_iccid" name="first_iccid" class="form-control" />
</div>
<div class="col-lg-4">
{{ $errors->first('first_iccid',
'<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
Anda belum mengisi data dengan benar !
</div>
')  }}
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-2">Last ICCID</label>
<div class="col-lg-3">
<input type="text" id="last_iccid" name="last_iccid" class="form-control" />
</div>
<div class="col-lg-4">
{{ $errors->first('last_iccid',
'<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
Anda belum mengisi data dengan benar !
</div>
')  }}
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-2">Quantity</label>
<div class="col-lg-3">
<input type="text" id="quantity" name="quantity" class="form-control" />
</div>
<div class="col-lg-4">
{{ $errors->first('quantity',
'<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
Anda belum mengisi data dengan benar !
</div>
')  }}
</div>
</div>
<div class="form-actions no-margin-bottom" style="text-align:center;">
{{ Form::submit('Update SPK', array('class' => 'btn btn-primary btn-line btn-rect')) }}
</div>
{{Form::close()}}
</div>
</div>
@stop

Это представление не работает и не может получить выбранные данные из $id в форму. Это возвращает эту ошибку:

«Неопределенное свойство: Illuminate \ Database \ Eloquent \ Collection :: $ id (представление: C: \ XAMPP \ htdocs \ ims2 \ app \ views \ modals \ edit-spk.blade.php)»

2

Решение

Ты можешь dd($spk) после $spk = Spk::find($id); в методе редактирования и вставьте вывод.

Редактировать:

Кнопка должна выглядеть так (нет формы)

<a href="{{ route('edit_spk', ['id' => $spk_data->id]) }}" class="btn btn-success btn-line btn-rect">
<i class="icon-pencil icon-white"></i> Edit
</a>

Контроллер:

public function edit($id){
$spk = Spk::find($id);
return View::make('modals.edit-spk', [
'spk' => $spk
]);
}

Попробуйте это и дайте мне знать, если ошибка не устранена. Если так, то это точно такая же ошибка? Если нет, пожалуйста, вставьте новый.

0

Другие решения

Что касается ошибки, то что-то в лезвии обращается к Eloquent Collection, и вы показываете нам функциональность для одного объекта SPK. Я уверен, что это представление не связано с ошибкой.

Он пытается получить доступ к свойству id, что-то вроде collection->id и, очевидно, это не сработает, потому что по содержанию коллекция похожа на многомерный ассоциативный массив. Это похоже на доступ $array->id когда на самом деле это $array[0]->id

Позвольте мне тем временем упростить ваш код:

В вашем маршруте вы указываете, какой метод в контроллере будет обрабатывать запрос.
Напишите в своей консоли:

php artisan make:request SpkContent

SpkController

use App\Http\Requests\SpkContent;

public function edit($id, SpkContent $request){

$spk = Spk::find($id);
//Not sure what this is for really, but you can simplify the lines below with this one
//$data = $request->validated();
//$spk = array_merge($spk->toArray(), $data);
$spk->distribution_code=Input::get('distribution_code');
$spk->destination=Input::get('destination');
$spk->hlr=Input::get('hlr');
$spk->first_iccid=Input::get('first_iccid');
$spk->last_iccid=Input::get('last_iccid');
$spk->quantity=Input::get('quantity');
return View::make('modals.edit-spk', compact('spk'));
}

public function update($id, SpkContent $request) {
// store
$data = $request->validated();
Spk::findOrFail($id)->update($data);

// redirect
Session::flash('message', 'Successfully updated SPK !');
return Redirect::to('spk_view');
}

SpkContent FormRequest

class SpkContent extends FormRequest
{
public function authorize()
{
return true;
}

public function rules()
{
//Add whatever validations you need, as in: max size, integers, etc
$content = [
'distribution_code' => 'required',
'destination' => 'required',
'hlr'=> 'required',
'first_iccid' => 'required',
'last_iccid' => 'required',
'quantity' => 'required'
];
return $content;
}
}

По крайней мере, таким образом вы можете абстрагировать валидацию от работы, намного более чистый и обслуживаемый код

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector