Tengo 2 tablas, almacén y categoría de artículos, quiero mostrar mi tabla en la opción de selección ajax. Logré mostrar la categoría de elemento de opción seleccionada.
Mi código Ajax
$(function () { var i = 0; $("#add-more-item").click(function () { ++i; $.ajax({ type:"GET", url:"/admin-master/get_item_category", dataType: 'JSON', success:function(res){ let option = ""; $.each(res,function(itemcategory_name,id_item_category){ option += '<option value='+id_item_category+'>'+ itemcategory_name+ '</option>' }); $(".add-more").append( '<tr><td><select class="form-control" id="warehouse"></select</td> <td><input type="text" name="item_code['+i+']" class="form-control" placeholder="Kode Barang" required></td> <td><select class="form-control" name="itemcategory_id['+i+']"><option>-- Pilih Ketegori --</option>'+option+'</select></td> <td><input type="text" name="item_name['+i+']" class="form-control" placeholder="Nama Barang" required</td> <td><input type="text" name="item_weight[]" class="form-control" placeholder="Contoh : 200 kg" required></td> <td><input type="text" name="item_height[]" class="form-control" placeholder="Contoh : 200 cm" required></td> <td><input type="number" name="item_qty[]" class="form-control" placeholder="Contoh : 200 " required></td> <td><input type="text" name="description[]" class="form-control" placeholder="Keterangan Barang"></td> <td align="center"><button type="button" class="remove-item btn btn-danger btn-md"><i class="fas fa-trash-alt"></i></a></td></tr>' ); } }); });¿Cómo recupero el almacén de datos? ¿Debo crear 2 URL para buscar artículos de categoría y almacén? puedo hacer 2 urls?
por qué no combina el almacén y la categoría de artículo en 1 url ajax
Ejemplo /admin-master/get_item_category_and_warehouse
y en controlador
return response([ 'item_categories' => $itemCategory, 'warehouse' => $warehouse, ]);y ajax función de éxito
success:function(res){ let item_categories = res.item_categories, warehouse = res.warehouse; // process options }Cada <option> tiene un valor de identificación de la tabla Categorías, ¿te sugiere eso?
Primero debe definir la relación entre ellos (categorías de tabla y almacén) en el modelo. (Uno a muchos)
Luego, debe crear 2 funciones en su controlador, la primera función para obtener todos los datos de Categoría, y la última es filtrar la tabla de Almacén con la identificación de Categoría.
Ejemplo:
función obtener datos de la tabla de categorías
public function getCategories(){
$category = CategoryModel::getAll();
return response()->json('data'=> $category);
}
filtro de función Almacén por id (de la tabla Categorías)/ejemplo
public function filterWarehouse($id){
// using Eloquent or QueryBuilder to find all Warehouse data by $id (Categories table)
return response()->json($wareHouseDataById);
}
Luego, en su opinión, debe llamar a un ajax para obtener todos los datos de las categorías (cualquiera que sea el nombre de la ruta que definió para llamar a las dos funciones anteriores) y completar los datos de las categorías en su etiqueta <option> . Listo para agregar filtro de evento onclick cada opción.
<option value='+ data.data.id +' onclick="getWarehouseFilter(data.data.id)">'+ data.data.name+'</option>Y el último trabajo es crear una nueva función de javascript y llamar a otro ajax para obtener datos de Warehouse (segunda función). (en el evento de propósito onclick)
Ejemplo de datos de almacén de filtro de llamadas ajax:
function getWarehouseFilter(id){
let id = $(this).attr(id);
o
let id = $(this).target.value;
$.ajax({
url: '/getFilterWarehouseData....',
method: 'post',
data: {id: id},
dataType: 'json',
success: function(data){
$('#htmlNeedToRenderData').html(rawHtml(your custom) + data )
// do not use append() in this case.
},
error: function(response){
// do whatever if got an error
}
})
}
Espero que esto te ayude.