使用模式 Laravel 的编辑功能出现问题

Problem with edit function using a modal Laravel

我有下一个功能

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>';

我想知道是否存在一种在同一模态中使用两个模型的方法...这样我只能同时使用一个模型...

我想我明白你的意思了...

你可以做的是使用传递了 2 个变量的路由,第一个变量可以是 tbl_perimetro 的 ID,第二个变量可以是 tbl_holding 的 ID。

所以,这适合这样:

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

希望对您有所帮助!!