Как я могу получить доступ к переменным / результатам запроса одного 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, по умолчанию? По умолчанию он возвращает все столбцы.

  1. Почему предпочитаю это js datatable?

0 ответов

Другие вопросы по тегам