Я использую CodeIgniter и таблицу данных с дочерней строкой.
Что я делаю, так это то, что у меня есть главная таблица с основным и вторым участником. Первичный член может идентифицировать, используя member_type=1
, а вторичный член member_type=2
. Оба члена связаны с таблицей отношений. Я могу отображать записи в таблице данных как с основным, так и со вторым участником.
Теперь я использую плагин дочерней строки таблицы данных (https://datatables.net/examples/api/row_details.html).. Мне нужно отобразить первичный элемент в списке, если пользователь хочет проверить вторичный элемент определенного первичного элемента, затем следует нажать на знак плюс изображение, и они получат список вторичных членов.
Таким образом, результат будет
Пояснение к коду
Теперь я вызываю две модели из Listdetails_ajax (). Сначала для первичных записей (getTotalList_of_primary();
), а затем для вторичных записей (getTotalList_of_secondary()
). В первой модели я получаю первичные данные с идентификатором и тем идентификатором, который я передаю второй модели, чтобы получить запись вторичного члена, связанную с идентификатором.
Проблема в том,
1) Я получаю все записи в таблице данных (мне нужны только первичные записи)
2) Как назначить дочернее значение в таблице данных?
Не могли бы вы помочь мне с этим вопросом?
Контроллер
public function Listdetails_ajax(){
$draw = intval($this->input->get("draw"));
$start = intval($this->input->get("start"));
$length = intval($this->input->get("length"));
$books = $this->Search_model->getTotalList_of_primary();
$data['draw'] = 1;
$data['recordsTotal'] = count($books);
$data['recordsFiltered'] = count($books);
foreach ($books as $key => $row)
{
//print_r($row->customer_id);
$arr_result = array(
"member_id" => base64_encode($this->encryption->encrypt($row->member_id)),
"profile_pic" => $row->profile_pic,
"name" => $row->first_name.' ' .$row->last_name,
"phone" => $row->phone,
"chss_no" => $row->chss_no,
"emp_id" => $row->emp_id,
"address" => $row->address
// "member_type" => $row->member_type
);
$data['data'][] = $arr_result;
$books_of_secondary = $this->Search_model->getTotalList_of_secondary($row->customer_id);
print_r($arr_result);
foreach ($books_of_secondary as $key => $row)
{
//print_r($row->customer_id);
$arr_result2 = array(
"s_member_id" => base64_encode($this->encryption->encrypt($row->member_id)),
"s_profile_pic" => $row->profile_pic,
"s_name" => $row->first_name.' ' .$row->last_name,
"s_phone" => $row->phone,
"s_chss_no" => $row->chss_no,
"s_emp_id" => $row->emp_id,
"s_address" => $row->address
);
$data['data'][] = $arr_result2;
print_r($arr_result2);
}
}
echo json_encode($data);
exit;
}
Модель
public function getTotalList_of_primary(){
$this->db->select('*');
$this->db->from('members');
$this->db->where('member_type',1);
$query = $this->db->get();
$res = $query->result();
return $res;
}
public function getTotalList_of_secondary($id){
$this->db->select('*');
$this->db->from('members');
$this->db->join('relation_member', 'relation_member.secondary_member_id = members.member_id');
$this->db->where('relation_member.primary_customer_id',$id);
$query = $this->db->get();
$res = $query->result();
return $res;
}
Datatable
function format ( d ) {
// `d` is the original data object for the row
return '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+
'<tr>'+
'<td>Full name:</td>'+
'<td>'+d.s_name+'</td>'+
'</tr>'+
'<tr>'+
'<td>Mobile number:</td>'+
'<td>'+d.s_phone+'</td>'+
'</tr>'+
'</table>';
}
$(document).ready(function() {
var oTable =$('#all_list').DataTable( {
"processing": true,
// "serverSide": true,
"pageLength": 10,
"ajax": {
"url": baseUrl+ "/index.php/Search/Listdetails_ajax",
"type": "POST"
},
"columns": [
{
"className": 'details-control',
"orderable": false,
"data": null,
"defaultContent": ''
},
{ "data": "member_id","className": "display_none"},
{ "data": "profile_pic","className":"img_list_pic",
"render": function (data, type, full, meta) {
return '<img src='+baseUrl+'/uploads/images/'+data+' class="search_pic">';
}
},
{ "data": "name" },
{ "data": "phone" },
{ "data": "chss_no" },
{ "data": "emp_id" },
{ "data": "address" },
],
} );
// Add event listener for opening and closing details
// Add event listener for opening and closing details
// Add event listener for opening and closing details
$('#all_list tbody').on('click', 'td.details-control', function () {
var tr = $(this).closest('tr');
var row = oTable.row( tr );
if ( row.child.isShown() ) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
}
else {
// Open this row
row.child( format(row.data()) ).show();
tr.addClass('shown');
$('[data-toggle="tooltip"]', tr.next('tr')).tooltip();
}
} );
} );
Json
Array
(
[member_id] => M2EwYzhmNzBjYTYzMTdiMzFiZDFjNGIwY2Y1NmYwNmQ3ZWY0MGEzNTg5OTY2YjBkNWUwZjc3MWY4NWJiZTdmMGM3Y2Y4YTdhZGI4MTM1MTMyMDVmMDQ1NjRkZTVmMmViZjYzMjcxZGVlODhmNzg1OGMzM2M1ZWI0MjUwYjQ5YzVOUDZSRlZKcFhaNWZ0eTg3NVlBT09HcFhwcW5XSGlIaWpYelJpOTduNzI0PQ==
[profile_pic] => 5b1b88a7cd85a1528531111090618.png
[name] => alpha bita
[mobileno] => 9898981234
[emp_id] => EMP_2018_03
[address] => Navi Mumbai
)
Array
(
[s_member_id] => ZWFlMjQwNGEwMGQ2YWVjMzlkZGRkN2Y1ZTQ1ODQ1NDc0N2M5ZDRiZDY3NDkyZDQ2YjNkN2UxZjI4ZTFhY2Y1Y2U1NWI2N2RlMDEyY2M5NDE3NDc2NWNiZmU4MzFjNWYwYzc2OWQxNjIzZDJiM2QwMzg0ODU2OWNjNDY5OWI4MWM0Yjl0YUgzOUVKaGNka2ZuTEp4Tk1EZitraTEyd2NtLzliNk8wSlpQU0FJPQ==
[s_profile_pic] =>
[s_name] => Anil
[s_phone] => 2121212121
[s_emp_id] =>
[s_address] => Navi Mumbai
)
Array
(
[member_id] => ZDVkYTFiMGM0MGRhNzBjMTg1N2VhMDMyYjU0NDQyMDFlNjMyNDNjNGFhZjg0ODM4YTRhNWJiZjBlODkyZGZkYzk5MGFmN2JjZmFmODM0ZTQ3NzA3NTkwZWFlNGIwYzU2MzBmZGQ0NTZlOTkyMWJiNDc2OTdmN2EyZjJkOGM0NDZDNTlRRVFmK1hoMUNZRlM3R0dFMCtvaGZMclplNWxIYk1DOG0vVklwMjBBPQ==
[profile_pic] => 5b1b8c15eefe31528531989090618.jpg
[name] => Ajay Waghmare
[phone] => 8989855451
[chss_no] => chss/ajay/2018
[emp_id] => emp_2018_45
[address] => Andheri Mumbai
)
Array
(
[s_member_id] => ZTk1NWYwNWVlMmE3ZTUwMjExMDk3NzlmNTE0YmQ5ZGYzNzkyOTU3M2ZjOGE3YWUyZjg0N2I3ODZhMzhmNWNmNTQ2ZTg1MTM4OGMxNzk4MjFmZWYzMzA3YzViODE5YWNjZmIzNDBlYzJlZTUwYzBhYmRjN2RhZmJmMzk5NjAxOTR1SmJyYngwbE04N0wwTVEyK280V0RhVWlKang4VzBlSExyK0VtQTB4eHlNPQ==
[s_profile_pic] => 5b1b8fae049341528532910090618.jpg
[s_name] => Rohit Suman
[s_phone] => 7885458454
[s_chss_no] => roh/sum/2018/09
[s_emp_id] =>
[s_address] => Andheri Mumbai
)
Array
(
[s_member_id] => MzVlOGFhM2MwN2RkMzNmYzdiMjhiMzdiNDVhOGMzMTVjZjhlOTFlNzg4ODAxNjFiM2JhZTExZDUxNzg2NDU3MDBmODllZmJlZTcxMThlOWFiODQ4YjAwMThmZGRmNDIxOTU0NWZmYzEwZTg5YzQzOWM3MDBhNGVlM2ZjMDQ5OTFjV3FuZGdsbXJtK3A1YUhFaEI1dTBSWDN5RkhKVVBEbFpJTE95eDdNb3Q0PQ==
[s_profile_pic] => 5b1b9052d56bd1528533074090618.jpg
[s_name] => Pankaj
[s_phone] => 8989989898
[s_chss_no] => p/2018/09/05
[s_emp_id] =>
[s_address] => Andheri Mumbai
)