Проблема с функцией редактирования с использованием модального Laravel - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть следующая функция

public function edit($id)
{
    if(request()->ajax())
    {
        $data = Tbl_Perimetro::findOrFail($id);
        return response()->json(['result' => $data]);

    }
}


public function update(Request $request, Tbl_Perimetro $user)
{
    $rules = array(
        'rif'      =>  'required',
        'razon_social'  =>  'required',
        'holdings_id' => 'required',
        'pines_id' => 'required'

    );


    $error = Validator::make($request->all(), $rules);

    if($error->fails())
    {
        return response()->json(['errors' => $error->errors()->all()]);
    }

    $form_data = array(
        'rif'        =>  $request->rif,
        'razon_social'    =>  $request->razon_social,
        'holdings_id' => $request->holdings_id,
        'pines_id' => $request->pines_id

    );

    Tbl_Perimetro::whereId($request->hidden_id)->update($form_data);

    return response()->json(['success' => 'Datos actualizados satisfactoriamente.']);

}

Моя проблема в том, что я хотел бы работать с некоторыми моделями ... и я знаю, как работать с одной моделью, которая является Tbl_Perimetro ... Я хотел бы работать с другой моделью под названием Tbl_Holding, но я использую модал для редактирования всей этой информации .. вот код модала:

$('#create_record').click(function(){
$('.modal-title').text('Add New Record');
$('#action_button').val('Add');
$('#action').val('Add');
$('#form_result').html('');

  $('#formModal').modal('show');
 });

$('#user_form').on('submit', function(event){
event.preventDefault();
var action_url = '';

if($('#action').val() == 'Add')
{
action_url = "{{ route('perimetro.store') }}";
} 
if($('#action').val() == 'Editar')
{
action_url = "{{ route('perimetro.update') }}";
}
  $.ajax({
url: action_url,
method:"POST",
data:$(this).serialize(),
dataType:"json",
success:function(data)
{
var html = '';
if(data.errors)
{
 html = '<div class="alert alert-danger">';
 for(var count = 0; count < data.errors.length; count++)
 {
  html += '<p>' + data.errors[count] + '</p>';
 }
 html += '</div>';
}
if(data.success)
{
 html = '<div class="alert alert-success">' + data.success + '</div>';
 $('#user_form')[0].reset();
 $('#user_perimetro').DataTable().ajax.reload();
}
$('#form_result').html(html);
}
});
});




 $(document).on('click', '.edit', function(){
var id = $(this).attr('id');
$('#form_result').html('');

$.ajax({

url :"/perimetro/"+id+"/edit",
dataType:"json",
success:function(data)
 {
$('#rif').val(data.result.rif);
$('#razon_social').val(data.result.razon_social);
$('#holdings_id').val(data.result.holdings_id);
$('#pines_id').val(data.result.pines_id);
$('#carteras_id').val(data.result.carteras_id);
$('#hidden_id').val(id);
$('.modal-title').text('Editar Registro');
$('#action_button').val('Editar');
$('#action').val('Editar');
$('#formModal').modal('show');
}
})
});

Это кнопка для редактирования информации

$button = '<button type="button" name="edit" id="'.$data->id.'" class="edit btn btn-primary btn-sm">Editar</button>';

Я хотел бы знать, существует ли способ работы с двумя моделями в одном и том же модале ... Таким образом, я могу работать только с одной моделью одновременно ...

1 Ответ

2 голосов
/ 18 февраля 2020

Я думаю, я понял, что вы имеете в виду ...

Что вы можете сделать, это использовать маршрут с 2 пропущенными переменными, первая переменная может быть идентификатором tbl_perimetro, а вторая переменная может быть идентификатором из tbl_holding.

Итак, это будет выглядеть так:

public function edit($id, $idholding)
{
    if(request()->ajax())
    {
        $data = Tbl_Perimetro::findOrFail($id);
        $data1 = Tbl_Holding::findOrFail($idholding);
        $alldata = array($data, $data1);  //----->THIS WILL BREAK YOUR JSON STRUCTURE BE CAREFUL
        return response()->json(['result' => $alldata]);

    }
}

И то же самое в функции обновления:

public function update(Request $request, Tbl_Perimetro $user, Tbl_Holding $holding)
{
    ...
}

Будьте внимательны при редактировании ваших маршрутов, потому что начиная с laravel 6 (я думаю) переменные ДОЛЖНЫ быть буквальными, поэтому новые маршруты должны соответствовать имени переменной функции p.ex:

Route::get('editmodels/{id}/{idholding}','Controller@edit'); //<----This will work
Route::get('editmodels/{id}/{id2}','Controller@edit'); //<----This won't work

Надеюсь, это поможет !!

...