Как я могу получить доступ к переменным / результатам запроса одного addColumn к другому addColumn в Laravel Yajra datatable
Проблема, упомянутая здесь Ссылка на вкладку проблемы Yajra Github
$lead_tags_list = array();
$tags_source = $this->get_tags_by_name('Lead Source');
$tags_status = $this->get_tags_by_name('Lead Status');
$tags_stages = $this->get_tags_by_name('Stages');
$tags_lead_priority = $this->get_tags_by_name('Lead Priority');
$this->contact_data_set = 0;
$main_query = DB::table('bas_lead As a')
->select('a.*')
->selectRaw('(SELECT GROUP_CONCAT(tag_id) FROM bas_lead_to_tag WHERE lead_id = a.lead_id) as tag_list')
->selectRaw(DB::raw('@rownum := @rownum + 1 AS rownum'))
->join('bas_contact AS b', 'b.contact_id', '=' , 'a.contact_id')
->where('a.status','=',1)
->where('b.status','=',1)
->orderBy('a.lead_id','DESC');
return DataTables::of($main_query)
->addIndexColumn()
->addColumn('sr_num', function ($query) {
return $query->rownum;
})
->addColumn('action', function ($query) {
return '<a href="'.$query->lead_id.'" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-edit"></i> Edit</a>';
})
->addColumn('lead_basic', function ($query) {
$contact_id = $query->contact_id;
$contact_data = DB::table('bas_contact')->where('contact_id', $contact_id)->get();
$salutation = $contact_data[0]->salutation;
$first_name = $contact_data[0]->first_name;
$middle_name = $contact_data[0]->middle_name;
$last_name = $contact_data[0]->last_name;
$full_name = $first_name.' '.$middle_name.' '.$last_name;
$company_id = $contact_data[0]->company_id;
// $matchThese = ['company_id' => $company_id, 'status' => 1];
$company_data = DB::table('bas_company')->where('company_id', $company_id)->get()->toarray();
$company_name = 'test';
if(isset($company_data)){
// $company_name = '';
// foreach ($company_data as $key => $object) {
// $company_name = $object->company_name;
// }
}
return array($full_name);
})
->addColumn('company', function ($query) {
$contact_id = $query->contact_id;
$contact_data = DB::table('bas_contact')->where('contact_id', $contact_id)->get();
$company_id = $contact_data[0]->company_id;
// $matchThese = ['company_id' => $company_id, 'status' => 1];
$company_data = DB::table('bas_company')->where('company_id', $company_id)->get()->toarray();
$company_name[0] = 'test';
if(isset($company_data)){
$company_name = '';
foreach ($company_data as $key => $object) {
$company_name = $object->company_name;
}
}
return array($company_name);
})
->addColumn('lead_contact', function ($query) {
$contact_id = $query->contact_id;
$phone_mapper_id = DB::table('bas_contact_to_phone')->where('contact_id', $contact_id)->get()->toarray();
$email_mapper_id = DB::table('bas_contact_to_email')->where('contact_id', $contact_id)->get()->toarray();
// $address_mapper_id = DB::table('bas_company_to_address')->where('company_id',$company_id)->get();
// if($address_mapper_id){
// $matchThese = ['address_id' => $address_mapper_id[0]->address_id, 'status' => 1];
// $address_data = DB::table('bas_address')->where($matchThese)->get();
// $address = '';
// }
$phone_array = array();
$email_array = array();
$contact_array = array();
if($phone_mapper_id){
foreach($phone_mapper_id as $phone_data){
if(isset($phone_data)){
$phone_details = DB::table('bas_phone')->where('phone_id', $phone_data->phone_id)->get();
$phone = decrypt($phone_details[0]->phone_number);
if(isset($phone)){
array_push($phone_array, $phone);
array_push($contact_array, $phone);
}
}
}
}
if($email_mapper_id){
foreach($email_mapper_id as $email_data){
if(isset($email_data)){
$email_details = DB::table('bas_email')->where('email_id', $email_data->email_id)->get();
$email = decrypt($email_details[0]->email_address);
if(isset($email)){
array_push($email_array, $email);
array_push($contact_array, $email);
}
}
}
}
return array('contact_details' =>$contact_array);
})
->addColumn('productservices', function ($query) {
$contact_id = $query->contact_id;
$contact_data = DB::table('bas_contact')->where('contact_id', $contact_id)->get();
$salutation = $contact_data[0]->salutation;
$first_name = $contact_data[0]->first_name;
$middle_name = $contact_data[0]->middle_name;
$last_name = $contact_data[0]->last_name;
$full_name = $first_name.' '.$middle_name.' '.$last_name;
return $full_name;
})
->addColumn('lead_details', function ($query) {
$contact_id = $query->contact_id;
$contact_data = DB::table('bas_contact')->where('contact_id', $contact_id)->get();
$salutation = $contact_data[0]->salutation;
$first_name = $contact_data[0]->first_name;
$middle_name = $contact_data[0]->middle_name;
$last_name = $contact_data[0]->last_name;
$full_name = $first_name.' '.$middle_name.' '.$last_name;
return $full_name;
})
->addColumn('last_comm', function ($query) {
$contact_id = $query->contact_id;
$contact_data = DB::table('bas_contact')->where('contact_id', $contact_id)->get();
$salutation = $contact_data[0]->salutation;
$first_name = $contact_data[0]->first_name;
$middle_name = $contact_data[0]->middle_name;
$last_name = $contact_data[0]->last_name;
$full_name = $first_name.' '.$middle_name.' '.$last_name;
return $full_name;
})
->addColumn('designation', function ($query) {
$contact_id = $query->contact_id;
$contact_data = DB::table('bas_contact')->where('contact_id', $contact_id)->get();
$designation_id = $contact_data[0]->designation_id;
$tag_name = '';
if($designation_id){
$tag_name = $this->get_tag_name_by_id($designation_id);
}
return array($tag_name);
})
->addColumn('source', function ($query) use($tags_source,$lead_tags_list) {
$source_array = array();
// i want to used this below query results , in below AddColumn stub as well
//$lead_tags = (DB::table('bas_lead_to_tag')->where('lead_id', $query->lead_id)->get()->pluck('tag_id')->toarray());
//$lead_tags = $this->get_lead_to_tags_list($query->lead_id);
$lead_tags = explode(',', $query->tag_list);
//echo $contains = array_has(array_values($lead_tags),array_values($tags_source));
$result=array_intersect(array_values($lead_tags),array_values($tags_source));
foreach($result as $value){
$tag_name = $this->get_tag_name_by_id($value);
array_push($source_array, $tag_name);
}
return $source_array;
})
->addColumn('statusprio', function ($query) use($tags_status,$tags_lead_priority,$lead_tags_list) {
$status_array = array();
//$lead_tags = $this->get_lead_to_tags_list($query->lead_id);
$lead_tags = explode(',', $query->tag_list);
$merged_data = array_merge(array_values($tags_status), array_values($tags_lead_priority));
// print_r($tags_status);
// exit;
$result=array_intersect(array_values($lead_tags),$merged_data);
foreach($result as $value){
$tag_name = $this->get_tag_name_by_id($value);
array_push($status_array, $tag_name);
}
return $status_array;
})
->addColumn('stage', function ($query) use($tags_stages,$lead_tags_list) {
$stage_array = array();
//$lead_tags = $this->get_lead_to_tags_list($query->lead_id);
$lead_tags = explode(',', $query->tag_list);
$result=array_intersect(array_values($lead_tags),array_values($tags_stages));
foreach($result as $value){
$tag_name = $this->get_tag_name_by_id($value);
array_push($stage_array, $tag_name);
}
$cache = \Cache::pull('lead_to_tag_list_'.$query->lead_id);
unset($cache['lead_to_tag_list_'.$query->lead_id]);
return $stage_array;
})
->addColumn('action', function ($query) {
return '<div class="settings-icon-list action" data-target-div="action_div"><a href="javascript:void(0);"><span class="glyphicon glyphicon-cog"></span><span class="caret-list"></span></a></div>';
})
->make(true);`
Если вы видите код выше, есть избыточное использование кода: $contact_data = DB::table('bas_contact')-> где ('contact_id', $contact_id)->get();
Как я могу использовать эти результаты запроса в другой локальной функции addColumn?
1.Как я могу использовать переменные / результаты запроса, сгенерированные в 1 addColumn с другими addColumn для той же строки?
2. Нужно ли использовать механизм кэширования для хранения результатов запроса в одном addColumn и вызывать данные кэша в другом addColumn для тех же данных строки?
3.Как заблокировать другие столбцы, кроме addColumn, по умолчанию? По умолчанию он возвращает все столбцы.
- Почему предпочитаю это js datatable?