#php #json #ajax #codeigniter #datatable
#php #json #ajax #codeigniter #datatable
Вопрос:
у меня в таблице есть значение «множественного выбора», когда я пытаюсь опубликовать его в моей таблице данных, он говорит «Не найдено совпадающих записей». я использую ‘json_encode’ для размещения массива в базе данных.
моя таблица выглядит следующим образом.
мой tb_product:
------------ -------------- --------------- ------------
| id_product | name_product | id_categories | price |
--------------------------------------------------------
| 1 | cola | ["1","3"] | 1 |
| 2 | burger | ["2","3"] | 4 |
--------------------------------------------------------
мои tb_categories:
------------ --------------
| id_cat | name_cat |
---------------------------
| 1 | drink |
| 2 | food |
| 3 | fat |
---------------------------
когда я пытаюсь показать его в datatable после объединения таблицы, он говорит «Не найдено совпадающих записей».
Модель:
function get_all_product() {
$this->datatables->select('id_product, name_product, name_cat, price');
$this->datatables->from('tb_product');
$this->datatables->join('tb_stock', 'id_categories=id_cat');
$data = $this->datatables->generate();
контроллер:
function get_product_json() {
header('Content-Type: application/json');
echo $this->m_table->get_all_product();
}
Вид:
<tr>
<th>Id</th>
<th>Product Name</th>
<th>Categories</th>
<th>Price</th>
</tr>
js:
var table = $("#fproduk").dataTable({
'aoColumnDefs': [{
'bSortable': false,
'aTargets': -1
}],
initComplete: function() {
var api = this.api();
$('#fproduk_filter input')
.off('.DT')
.on('input.DT', function() {
api.search(this.value).draw();
});
},
oLanguage: {
sProcessing: "loading..."
},
processing: true,
serverSide: true,
ajax: {"url": "../datatable/get_produk_json", "type": "POST"},
columns: [
{"data": "id_product"},
{"data": "name_product"},
{"data": "name_cat"},
{"data": "price", render: $.fn.dataTable.render.number(',', '.', '')}
],
order: [[1, 'asc']],
rowCallback: function(row, data, iDisplayIndex) {
var info = this.fnPagingInfo();
var page = info.iPage;
var length = info.iLength;
$('td:eq(0)', row).html();
}
});
Другие таблицы данных, которые не используют «множественный выбор», работают нормально, но не с ним.
То, что я хочу от моего результата с данными, похоже на это.
------------ -------------- ------------------- ------------
| Id | Product Name | Categories | Price |
------------------------------------------------------------
| 1 | cola | Drink, Fat | 1 |
| 2 | burger | Food, Fat | 4 |
------------------------------------------------------------
Спасибо за ваше внимание.
Комментарии:
1. В целях нормализации базы данных не храните значения, разделенные запятыми, в базе данных.
2. итак, как мне сохранить несколько выбранных данных?
3. сохраните их в третьей таблице с именем product_category, в которой сохраняются только product_id,category_id, вы можете легко сохранить несколько категорий для одного и того же продукта.