Laravel-datatables: рдореИрдВ рд╕рднреА рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреИрд╕реЗ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 4 рдЬреБрд▓ре░ 2017  ┬╖  16рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: yajra/laravel-datatables

рд╕рдорд╕реНрдпрд╛ рдпрд╛ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢

рдореБрдЭреЗ рдбреЗрдЯрд╛ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рдПрдХ рдЪрд░ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рднреА рдРрдб-рдлреЙрд░реНрдореВрд▓рд╛ () рдФрд░ editColumn () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ

рдХреБрдЫ рдЗрд╕ рддрд░рд╣
`` `
рд░рд┐рдЯрд░реНрди рдбреЗрдЯрд╛рдЯреИрдм :: рдХрд╛ ($ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛)
-> рд╕реЗрдЯрдЧреНрд▓реЛрдмрд▓ (рдлрд╝рдВрдХреНрд╢рди ($ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛))
$ рд╕реНрдерд┐рддрд┐ = getUserStatus ($ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-> рдЖрдИрдбреА) ;
})
-> AddColumn ('рд╕реНрдерд┐рддрд┐', рдлрд╝рдВрдХреНрд╢рди ($ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛) {
// рд░рд┐рдЯрд░реНрди getUserStatus ($ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛- рдЖрдИрдбреА);
$ рд╕реНрдерд┐рддрд┐ рд▓реМрдЯрд╛рдПрдВ;
};
-> EditColumn ('is_approved', function ($ user) {
// рд░рд┐рдЯрд░реНрди getUserStatus ($ user-> id)? рд╕рд╣реА рдЧрд▓рдд;
рд╡рд╛рдкрд╕реА ($ рд╕реНрдерд┐рддрд┐)? рд╕рд╣реА рдЧрд▓рдд;


so, each time I don't need to call this **getUserStatus($user->id)** function.
<!--
If applicable, please include a copy of your code
which triggers the suspected bug.

You may use the markdown php code tags to format your paste:

```php
$params = ['foo'];

->

рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рд╡рд░рдг

  • рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо
  • PHP рд╕рдВрд╕реНрдХрд░рдг
  • рд▓рд╛рд░рд╡реЗрд▓ рд╕рдВрд╕реНрдХрд░рдг
  • рд▓рд╛рд░рд╛рд╡реЗрд▓-рдбреЗрдЯрд╛рдЯреИрдмрд▓реНрд╕ рд╕рдВрд╕реНрдХрд░рдг

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╡реИрд╢реНрд╡рд┐рдХ? рдмрд╕ рдмрдВрдж рд╣реЛрдиреЗ рдкрд░ рдЪрд░ рдкрд╛рд╕?

$status = getUserStatus($user->id);

return Datatables::of($users)
->addColumn('status', function ($user) use ($status) {
  return $status;
});

рд╕рднреА 16 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╡реИрд╢реНрд╡рд┐рдХ? рдмрд╕ рдмрдВрдж рд╣реЛрдиреЗ рдкрд░ рдЪрд░ рдкрд╛рд╕?

$status = getUserStatus($user->id);

return Datatables::of($users)
->addColumn('status', function ($user) use ($status) {
  return $status;
});

рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЬрд╛рдП
рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

return Datatables::of($users) ->setGlobal(function ($user){ //for $user->id = 1 //status = true //for $user->id = 2 // status = false **$status** = **getUserStatus($user->id)**; }) ->addColumn('status', function ($user) { // return getUserStatus($user->id); return $status; }); ->editColumn('is_approved', function ($user) { //return getUserStatus($user->id) ? true : false; return ($status) ? true : false;

рдХреГрдкрдпрд╛ рдбреЗрд╡рд▓рдкрд░ рдХреА рд╕рдореАрдХреНрд╖рд╛ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмрдВрдж рди рдХрд░реЗрдВред

рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╣реАрдВ рд╣реИред

->addColumn('status', function ($user) {
    return getUserStatus($user->id);
});
->addColumn('status', function ($user) {
    return getUserStatus($user->id);
})
->editColumn('xyz', function ($user) {
    return getUserStatus($user->id);
});

рдкреНрд░рддреНрдпреЗрдХ рдРрдб рдпрд╛ рдПрдбрд┐рдЯ рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЙрд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЬреЛ MySql рдХреНрд╡реЗрд░реА рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛, рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЙрд╕реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ 5 рдХреЙрд▓рдо рд╣реИрдВ рддреЛ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ 5 рдмрд╛рд░ рдХреЗ рд▓рд┐рдП MySql рдХреНрд╡реЗрд░реА рдХреЙрд▓ рдФрд░ 1000 рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдпрд╣ 1000 * 5 = 5000 рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреНрд╡реЗрд░реА рд╣реЛрдЧреАред

рдпрджрд┐ рдореИрдВ рдкреЗрдЬрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдиреНрдпреВрдирддрдо 20 рд░рд┐рдХреЙрд░реНрдб 20 * 5 = 100 рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рднреАред

рдпрджрд┐ рдЖрдк N + 1 рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЙрддреНрд╕реБрдХ рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рд░реЗрдлрд░реА рдХреЗ рд▓рд┐рдП рдпрд╣ рдбреЗрдореЛ рджреЗрдЦреЗрдВ: https://datatables.yajrabox.com/relation/belongs-to

рдпрд╛ рдЬреНрд╡рд╛рдЗрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреА рдХреНрд╡реЗрд░реА рдореЗрдВ рд╕реНрдерд┐рддрд┐ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред

https://datatables.yajrabox.com/fluent/joins

$assignments = DB::table('assignments as a')
        ->when($round_id != "" || $round_id != NULL, function ($query) use ($round_id) {
            return $query->where('a.round_id', '=', $round_id);
        })
        ->leftJoin('rounds as r', 'a.round_id', '=', 'r.id')
        ->leftJoin('surveys as su', 'a.id', '=', 'su.assignment_id')
        ->leftJoin('projects as p', 'r.project_id', '=', 'p.id')
        ->leftJoin('sites as s',  'a.site_id', '=', 's.id')
        ->leftJoin('fieldreps as f', 'a.fieldrep_id', '=', 'f.id')
        ->leftJoin('chains as ch','p.chain_id','=','ch.id')
        ->leftJoin('clients as c','ch.client_id','=','c.id')
        ->when(is_string($status) && $status != "", function ($query) use ($status, $current_date) {
            if($status == 'late'){
                return $query->where(function ($query) use ($current_date) {
                    $query->where(function ($query)  {
                        $query->where(DB::raw('IFNULL( DATE_FORMAT(a.deadline_date,"%Y-%c-%e"), DATE_FORMAT(r.deadline_date,"%Y-%c-%e"))'), '<', DB::raw('CURDATE()'));
                    })
                    ->where(function ($query) use ($current_date) {
                        $query->where('a.is_scheduled', '=', true)
                        ->where('a.is_reported', '=', false)
                        ->where('a.is_partial', '=', false);
                    });
                });
            }else if($status == 'scheduled'){
                return $query->where(function ($query) use ($current_date) {
                    $query->where(function ($query)  {
                        $query->where(DB::raw('IFNULL( DATE_FORMAT(a.deadline_date,"%Y-%c-%e"), DATE_FORMAT(r.deadline_date,"%Y-%c-%e"))'), '>=', DB::raw('CURDATE()'));
                    })
                    ->where(function ($query) use ($current_date) {                     
                        $query->where('a.is_scheduled', '=', true)
                        ->where('a.is_reported', '=', false)
                        ->where('a.is_partial', '=', false);
                    });
                });
            }
            else if($status == 'pending'){
                return $query->leftJoin('assignments_offers as ao', function($join)
                {
                    $join->on('a.id', '=', 'ao.assignment_id');
                })
                ->where('a.is_scheduled', '=', false)
                ->where(DB::raw('(SELECT count(id) as offer_count FROM assignments_offers where assignment_id = a.id and is_accepted is null)'), '<=', '0')
                ->groupBy('a.id');
            }else if($status == 'offered'){
                return $query->leftJoin('assignments_offers as ao', function($join)
                {
                    $join->on('a.id', '=', 'ao.assignment_id');
                })
                ->where(['a.is_scheduled' => false, 'a.is_offered' => true])->where(['ao.is_accepted' => NULL])
                ->groupBy('ao.assignment_id');
            }else if($status == 'reported'){
                return $query->where(['a.is_reported' => true, 'is_approved' => false]);
            }else if($status == 'partial'){
                return $query->where('a.is_partial', true);
            }else if($status == 'completed' || $status == 'approved'){
                return $query->where('a.is_approved', true);
            }
        })
        ->select([
            'a.id',
            'a.fieldrep_id',
            'a.deadline_date',
            'a.is_scheduled',
            'a.is_reported',
            'a.is_partial',
            'a.is_offered',
            'a.is_approved',
            'c.client_logo',
            'p.id as project_id',
            'p.project_name',
            'r.id as round_id',
            'r.round_name',
            's.site_code',
            's.site_name',
            's.city',
            's.state',
            's.zipcode',
            'su.id as survey_id',
            DB::raw("CONCAT(IFNULL( DATE_FORMAT(a.schedule_date,'%d %b %Y'), DATE_FORMAT(r.schedule_date,'%d %b %Y')), ' ' , IFNULL(TIME_FORMAT(a.start_time, '%h:%i %p'), TIME_FORMAT(r.start_time,'%h:%i %p'))) as assignment_scheduled"),
            DB::raw("CONCAT(IFNULL( DATE_FORMAT(a.deadline_date,'%d %b %Y'), DATE_FORMAT(r.deadline_date,'%d %b %Y')), ' ' , IFNULL(TIME_FORMAT(a.start_time, '%h:%i %p'), TIME_FORMAT(r.deadline_time,'%h:%i %p'))) as assignment_end"),
            DB::raw('CONCAT(f.first_name," ",f.last_name) as schedule_to'),
            DB::raw('(select COUNT(id) as offer_count from assignments_offers where assignment_id = a.id and is_accepted is null group by assignment_id) as offer_count'),
            ]);

рдкреНрд░рд╢реНрди рдпрд╣ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИред рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЙрддреНрд╕реБрдХ рд▓реЛрдбрд┐рдВрдЧ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛

рдХреЙрд▓рдо рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП getXYZ рдФрд░ setXYZ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╡рд╕реНрддреБ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдареАрдХ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдХреНрд╡реЗрд░реА рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереАред ^ _ ^

рддрдм рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрджрд┐ рд╕реНрдерд┐рддрд┐ рдмрд╣реБрдд рдмрд╛рд░ рдирд╣реАрдВ рдмрджрд▓рддреА рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕реЗрдЯ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

- рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ -
рд╢рд╛рдпрдж рдХреБрдЫ рдЗрд╕ рддрд░рд╣:
`` `php
рдлрд╝рдВрдХреНрд╢рди getUserStatus ($ id) {
рд╡рд╛рдкрд╕реА рдХреИрд╢ :: рдпрд╛рдж рд░рдЦреЗрдВ ('user.statusред' $ id, 1, function ($ id) {
рд╡рд╛рдкрд╕реА рд╕реНрдерд┐рддрд┐ :: рдЦреЛрдЬ ($ рдЖрдИрдбреА);
};
}

->setGlobal(function ($user){
//for $user->id = 1 //status = true
//for $user->id = 2 // status = false
$status = getUserStatus($user->id);
})

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреБрдЫ рд╣реЛрдЧрд╛

рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ setGlobal рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЕрднреА рднреА рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреБрди: рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рддрд╛рдХрд┐ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рдЗрд╕рд▓рд┐рдП рдХрдИ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдЕрднреА рднреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ 100s рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╛рд╕реНрддрд╛ рддрд▓рд╛рд╢рддрд╛ рд╣реВрдВред рд╕рд┐рд░реНрдл рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдХреЙрд▓рдо рдореЗрдВ getXYZ рдФрд░ setXYZ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдгред

рдореЗрд░реЗ рдкрд╛рд╕ рднреА рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ (рд╕рд╛рдорд╛рдиреНрдп) рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреВрдВ
@ruchisheth рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреБрдЫ рдорд┐рд▓рд╛ рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рдЕрдкрдирд╛ рдЙрддреНрддрд░ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ

рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдорджрдж рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж.. :)

рд╡рд╣реА @ruchisheth

@rajanjain рдФрд░ @haratmalli рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╣рд▓ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред

рдирдорд╕реНрддреЗ рдХреНрдпрд╛ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рдХреЙрд▓рдо рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдереА

data-> рдореВрд░реНрддрд┐рдпрд╛рдБ = 4;

рджреВрд╕рд░реЗ рдХреЙрд▓рдмреИрдХ рдкрд░ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕