Laravel-datatables: 1000 рд╕реЗ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рд╣реЛрдиреЗ рдкрд░ рдзреАрдореА рд▓реЛрдбрд┐рдВрдЧ

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

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

рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХреЛ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рдмрд╛рдж рдЗрд╕рдиреЗ рдореБрдЭреЗ рдзреАрдорд╛ рдХрд░ рджрд┐рдпрд╛ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдзреАрдорд╛)ред рдореИрдВ рдХреНрд╡реЗрд░реА> 1K рдбреЗрдЯрд╛ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдбреЗрдЯрд╛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо 5 рд╕реЗрдХрдВрдб рдпрд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рд▓реЛрдб рд╣реЛрддрд╛ рд░рд╣рддрд╛ рд╣реИред рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдкрд░рд┐рд╡рд░реНрддрди рднреАред

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

public function getData()
{
    $brands = Brand::select('id', 'name');

    return Datatables::of($brands)
        ->addColumn('action', function ($brand) {
            return '
            <a href="/brands/' . $brand->id . '/edit" class="btn btn-xs btn-primary">
                <i class="fa fa-pencil"></i> Edit
            </a>
            <a href="#" id="delete-button" data-id="' . $brand->id . '" class="btn btn-xs btn-danger">
            <i class="fa fa-times"></i> Delete
            </a>
            ';
        })
        ->make(true);
}

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

рдбрд┐рдЬрд┐рдЯрд▓ рдорд╣рд╛рд╕рд╛рдЧрд░ $ 10ред

  • рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо Ubuntu 16.04
  • PHP рд╕рдВрд╕реНрдХрд░рдг 7.1
  • рд▓рд╛рд░рд╡реЗрд▓ рд╕рдВрд╕реНрдХрд░рдг 5.3
  • Laravel-Datatables рд╕рдВрд╕реНрдХрд░рдг рдирд╡реАрдирддрдо
performance question

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

рд╣рд╛рдВ, рдХреНрд╡реЗрд░реА рдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рдХрд░рдирд╛ рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдзреАрдореЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рд╣реИред рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВред рдзрдиреНрдпрд╡рд╛рдж!

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

рдореИрдВ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ 1 рд▓рд╛рдЦ рд╕реЗ рдЕрдзрд┐рдХ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рд╛рдеред рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдкреНрд░рд╢реНрди рдФрд░ рдкрд░рд┐рджреГрд╢реНрдп рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рд╣реИред рдЕрдкрдиреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдореИрдВ 3 рд╕реЗ рдЕрдзрд┐рдХ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдбреЗрдЯрд╛ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реВрдВред рдФрд░ рдореИрдВ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрддрдВрдн рдорд╛рди рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдпрд╣ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ

   /**
     * 
     *
     * function to return table view
     */
    public function inbox_ticket_list() {
        $table = \Datatable::table()
                ->addColumn(
                        "", Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at'))
                ->noScript();

        return view('themes.default1.agent.helpdesk.ticket.inbox', compact('table'));
    }

рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ рдореИрдВ рдбреЗрдЯрд╛рдЯрдмрд▓ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдмреНрд▓реЗрдб рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

{!!$table->render('vendor.Chumper.template')!!}
{!! $table->script('vendor.Chumper.ticket-javascript') !!}

рдореЗрд░реА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмреНрд▓реЗрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореИрдВ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рд░реНрдЧ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдореЗрд░реА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдХреНрд╡реЗрд░реА рдмрд┐рд▓реНрдбрд░ рдХреЛ рдЬреЙрдЗрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред
рдЯрд┐рдХрдЯ- javascript.blade

<?php
$segments = \Request::segments();
$segment = "";
foreach($segments as $seg){
    $segment.="/".$seg;
}
?>
<script type="text/javascript">
        function myFunction()
        {
            return jQuery('#chumper').dataTable({
                "sDom": "<'row'<'col-xs-6'l><'col-xs-6'f>r>"+
                        "t"+
                        "<'row'<'col-xs-6'i><'col-xs-6'p>>",
                "sPaginationType": "full_numbers",
                "bProcessing": true,
                "bServerSide": true,
                "lengthMenu": [[10, 25, 50, 100, 500], [10, 25, 50, 100, 500]],
                "ajax": {
                    url: "{{url('filter')}}",
                    data: function (d) {
                        d.labels = $('select[name=label]').val();
                        d.tags = $('select[name=tag]').val();
                        d.segment = "{{$segment}}";
                    }
                },
                "aaSorting": sort,
                "columnDefs": [
                    { "searchable": false, "targets": [6,7] },
                    { "visible": last, "targets": 6 },
                    {"visible": create, "targets":7},
                ],
                "fnCreatedRow": function (nRow, aData, iDataIndex) {
                    var str = aData[3];
                    if (str.search("#000") == -1) {
                        $("td", nRow).css({"background-color": "#F3F3F3", "font-weight": "600", "border-bottom": "solid 0.5px #ddd", "border-right": "solid 0.5px #F3F3F3"});
                        $("td", nRow).mouseenter(function () {
                            $("td", nRow).css({"background-color": "#DEDFE0", "font-weight": "600", "border-bottom": "solid 0.5px #ddd", "border-right": "solid 0.5px #DEDFE0"});
                        });
                        $("td", nRow).mouseleave(function () {
                            $("td", nRow).css({"background-color": "#F3F3F3", "font-weight": "600", "border-bottom": "solid 0.5px #ddd", "border-right": "solid 0.5px #F3F3F3"});
                        });
                    } else {
                        $("td", nRow).css({"background-color": "white", "border-bottom": "solid 0.5px #ddd", "border-right": "solid 0.5px white"});
                        $("td", nRow).mouseenter(function () {
                            $("td", nRow).css({"background-color": "#DEDFE0", "border-bottom": "solid 0.5px #ddd", "border-right": "solid 0.5px #DEDFE0"});
                        });
                        $("td", nRow).mouseleave(function () {
                            $("td", nRow).css({"background-color": "white", "border-bottom": "solid 0.5px #ddd", "border-right": "solid 0.5px white"});
                        });
                    }
                }
            });
        }
</script>

рдХреНрд╡реЗрд░реА рдмрд┐рд▓реНрдбрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп

public function table(){
        // if (Auth::user()->role == 'admin') {
            $ticket = new Tickets();
            $tickets = $ticket
                    ->leftJoin('ticket_thread', function ($join) {
                        $join->on('tickets.id', '=', 'ticket_thread.ticket_id')
                        ->whereNotNull('title')
                        ->where('ticket_thread.is_internal', '<>', 1);
                    })
                    ->leftJoin('ticket_thread as ticket_thread2', 'ticket_thread2.ticket_id', '=', 'tickets.id')
                    ->Join('ticket_source', 'ticket_source.id', '=', 'tickets.source')
                    ->leftJoin('ticket_priority', 'ticket_priority.priority_id', '=', 'tickets.priority_id')
                    ->leftJoin('users as u', 'u.id', '=', 'tickets.user_id')
                    ->leftJoin('users as u1', 'u1.id', '=', 'tickets.assigned_to')
                    ->leftJoin('ticket_attachment', 'ticket_attachment.thread_id', '=', 'ticket_thread.id')
                    ->leftJoin('teams', 'teams.id', '=', 'tickets.team_id')
                    ->leftJoin('ticket_collaborator', 'ticket_collaborator.ticket_id', '=', 'tickets.id')
                    ->select(
                        'tickets.id',
                        // 'tickets.team_id',
                        'ticket_thread.title',
                        'tickets.ticket_number',
                        'ticket_priority.priority',
                        'u.user_name as user_name',
                        'u1.user_name as assign_user_name',
                        \DB::raw('max(ticket_thread.updated_at) as updated_at'),
                        \DB::raw('min(ticket_thread.updated_at) as created_at'),
                        'u.first_name as first_name',                        
                        'u.last_name as last_name',
                        'u1.first_name as assign_first_name',
                        'u1.last_name as assign_last_name',
                        'ticket_priority.priority_color',
                        'teams.name',
                        DB::raw('COUNT(DISTINCT ticket_thread2.id) as countthread'),
                        DB::raw('COUNT(ticket_attachment.thread_id) as countattachment'),
                        DB::raw('COUNT(ticket_collaborator.ticket_id) as countcollaborator'),
                        'tickets.status',
                        'tickets.user_id',
                        'tickets.priority_id', 'tickets.assigned_to',
                        'ticket_status.name as tickets_status',
                        'ticket_source.css_class as css',
                        DB::raw('substring_index(group_concat(ticket_thread.poster order by ticket_thread.id desc) , ",", 1) as last_replier'),
                        DB::raw('substring_index(group_concat(ticket_thread.title order by ticket_thread.id asc) , ",", 1) as ticket_title'),
                        'u.active as verified')
                    ->groupby('tickets.id');
        return \Ttable::getTable($table); // call to function which renders table
    }

рдЕрдВрдд рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ

public static function getTable($tickets) {
        return \Datatables::of($tickets)
                        ->addColumn('id', function ($tickets) {
                            return "<input type='checkbox' name='select_all[]' id='" . $tickets->id . "' onclick='someFunction(this.id)' class='selectval icheckbox_flat-blue' value='" . $tickets->id . "'></input>";
                        })
                        ->addColumn('title', function ($tickets) {
                            if (isset($tickets->ticket_title)) {
                                $string = mb_substr($tickets->ticket_title, 0, 20, 'UTF-8');
                            } else {
                                $string = Lang::get('lang.no-subject');
                            }
                            $collab = $tickets->countcollaborator;
                            if ($collab > 0) {
                                $collabString = '&nbsp;<i class="fa fa-users"></i>';
                            } else {
                                $collabString = null;
                            }
                            $attachCount = $tickets->countattachment;
                            if ($attachCount > 0) {
                                $attachString = '&nbsp;<i class="fa fa-paperclip"></i>';
                            } else {
                                $attachString = '';
                            }
                            $css = $tickets->css;
                            $titles = '';
                            if ($tickets->ticket_title) {
                                $titles = $tickets->ticket_title;
                            }
                            $tooltip_script = self::tooltip($tickets->id);
                            return "<div class='tooltip1' id='tool" . $tickets->id . "'>
                            <a href='" . route('ticket.thread', [$tickets->id]) . "'>" . ucfirst($string) . "&nbsp;<span style='color:green'>(" . $tickets->countthread . ") <i class='" . $css . "'></i></span>
                            </a>" . $collabString . $attachString . $tooltip_script .
                                    "<span class='tooltiptext'  id='tooltip" . $tickets->id . "'>Loading...</span></div>";
                        })
                        ->addColumn('ticket_number', function ($tickets) {
                            return "<a href='" . route('ticket.thread', [$tickets->id]) . "' title='" . $tickets->ticket_number . "'>#" . $tickets->ticket_number . '</a>';
                        })
                        ->addColumn('priority', function ($tickets) {
                            $rep = ($tickets->last_replier == 'client') ? '#F39C12' : '#000';
                            $priority = $tickets->priority;
                            if ($priority != null) {
                                $prio = '<button class="btn btn-xs ' . $rep . '" style="background-color: ' . $tickets->priority_color . '; color:#F7FBCB">' . ucfirst($tickets->priority) . '</button>';
                            } else {
                                $prio = $tickets->last_relier_role;
                            }
                            return $prio;
                        })
                        ->addColumn('user_name', function ($tickets) {
                            $from = $tickets->first_name;
                            $url = route('user.show', $tickets->user_id);
                            $name = $tickets->user_name;
                            if ($from) {
                                $name = utfEncoding($tickets->first_name) . ' ' . utfEncoding($tickets->last_name);
                            }
                            $color = '';
                            if ($tickets->verified == 0 || $tickets->verified == '0') {
                                $color = "<i class='fa fa-exclamation-triangle'  title='" . Lang::get('lang.accoutn-not-verified') . "'></i>";
                            }
                            return "<a href='" . $url . "' title='" . Lang::get('lang.see-profile1') . ' ' . ucfirst($name) . '&apos;' . Lang::get('lang.see-profile2') . "'><span style='color:#508983'>" . ucfirst(str_limit($name, 30)) . ' <span style="color:#f75959">' . $color . '</span></span></a>';
                        })
                        ->addColumn('assign_user_name', function ($tickets) {
                            if ($tickets->assigned_to == null && $tickets->name == null) {
                                return "<span style='color:red'>Unassigned</span>";
                            } else {
                                $assign = $tickets->assign_user_name;
                                if ($tickets->assigned_to != null) {
                                    $assign = utfEncoding($tickets->assign_first_name) . ' ' . utfEncoding($tickets->assign_last_name);

                                $url = route('user.show', $tickets->assigned_to);
                                return "<a href='" . $url . "' title='" . Lang::get('lang.see-profile1') . ' ' . ucfirst($assign) . '&apos;' . Lang::get('lang.see-profile2') . "'><span style='color:green'>" . mb_substr(ucfirst($assign), 0, 30, 'UTF-8') . '</span></a>';
                            } else{
                                $url1 = "#";
                                return "<a href='" . $url1 . "' title='" . Lang::get('lang.see-profile1') . ' ' . ucfirst($tickets->name) . '&apos;' . Lang::get('lang.see-profile2') . "'><span style='color:green'>" . mb_substr(ucfirst($tickets->name), 0, 30, 'UTF-8') . '</span></a>';


                                }
                            }
                        })
                        ->addColumn('updated_at', function ($tickets) {
                            $TicketDatarow = $tickets->updated_at;
                            $updated = '--';
                            if ($TicketDatarow) {
                                $updated = $tickets->updated_at;
                            }
                            return '<span style="display:none">' . $updated . '</span>' . UTC::usertimezone($updated);
                        })
                        ->addColumn('created_at', function ($tickets) {
                            $TicketDatarow = $tickets->created_at;
                            $updated = '--';
                            if ($TicketDatarow) {
                                $updated = $tickets->created_at;
                            }
                            return '<span style="display:none">' . $updated . '</span>' . UTC::usertimezone($updated);
                        })
                        ->make();
    }

рдпрд╣ рдкрд╣рд▓реЗ 500 рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛ рдмрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВ php7, WAMP, mysql 5.7.14 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

@ssuhat рдЗрд╕ рд▓рдВрдмреА рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ рдореБрджреНрджрд╛ рдореЗрд░рд╛ рдЬреИрд╕рд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдореБрджреНрджрд╛ рдирд╣реАрдВ рдЙрдард╛рдирд╛ рдЪрд╛рд╣рддрд╛ред

рдЗрд╕ рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдкрдиреЗ рдбреЗрдореЛ рдРрдк рдкрд░ рднреА рдбрд┐рдЬрд┐рдЯрд▓ рдорд╣рд╛рд╕рд╛рдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдереЛрдбрд╝реА рддреЗрдЬ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдХреБрдЫ рдФрд░ рд╣реЛ рд░рд╣рд╛ рд╣реЛрдЧрд╛? рд╢рд╛рдпрдж рдЕрдкрдиреЗ рд▓реЙрдЧ рдФрд░ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ?

@yajra рдореИрдВ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП Laravel Forge рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд░реНрд╡рд░ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

@yajra рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдореЗрд░реЗ рд▓рд┐рдП рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рд╣реИ?

рд╣рд╛рдп, рдореЗрд░реА рднреА рдареАрдХ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред

3 рдХреЗ рд╕рд╛рде 8 рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░ im 25.000 рд░рд┐рдХреЙрд░реНрдб рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдФрд░ рдпрд╣ рдзреАрд░реЗ-рдзреАрд░реЗ рд╣реИред (рдкреНрд░рддрд┐ рдкреГрд╖реНрда 8 рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 25 рд░рд┐рдХреЙрд░реНрдб)

рдмрд╛рдд рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реБрдЭрд╛рд╡? рдзрдиреНрдпрд╡рд╛рдж

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдзреАрдореА рдХреНрд╡реЗрд░реА рдХреЛ рд▓реЙрдЧ рдХрд░ рд╕рдХреЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рд╕рд┐рдлрд╛рд░рд┐рд╢ рд╣реИ?

@ssuhat рдФрд░ @ mariani10 , рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕реБрдЭрд╛рд╡ рд╣реИ (рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░реЗрдВ рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ)ред рдЕрдкрдиреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдЬрд╛рдВрдЪреЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВрдиреЗ рдЬреЛ рдХреНрд╡реЗрд░реА рд▓рд┐рдЦреА рдереА рд╡рд╣ рдзреАрдореА рдереА рдЗрд╕рд▓рд┐рдП рдЗрд╕рдиреЗ рдбрд┐рдЯреИрдЯреЗрдмрд▓ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рдзреАрдорд╛ рдХрд░ рджрд┐рдпрд╛ред рдХреНрд╡реЗрд░реА рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рдЕрдм рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХреА рдХреБрдВрдЬреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рдмрджрд▓рдиреЗ рдХреЗ:
$brands = Brand::select('id', 'name');
=> $brands = Brand::query();

рд╣рд╛рдВ, рдХреНрд╡реЗрд░реА рдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рдХрд░рдирд╛ рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдзреАрдореЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рд╣реИред рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВред рдзрдиреНрдпрд╡рд╛рдж!

рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдкрдиреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЕрдкрдирд╛ рдбреЗрдЯрд╛ рдбреЗрдЯрд╛рдЯреЗрдмрд▓реНрд╕ (рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдирд╣реАрдВ - рдЙрдкрд░реЛрдХреНрдд рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рджреЗрдЦреЗрдВ) рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ - рд╣рд╛рдБ, рдЖрдк рдЕрдиреБрдХреНрд░рдорд┐рдд рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд╕реНрддрдВрднреЛрдВ рдХреЗ рд╕рдордЧреНрд░ рдЕрдиреБрдХреНрд░рдо рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╕реЗ рдЪрдпрди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдХреНрд╡реЗрд░реА SELECT foo, bar, MAX(created) WHERE ... GROUP BY foo, bar' рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдХреЙрд▓рдо foo, рдмрд╛рд░, create_at рдкрд░ рдПрдХ рдХрдВрдкреЛрдЬрд┐рдЯ рдЗрдВрдбреЗрдХреНрд╕ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЬрдм рдореИрдВрдиреЗ рдРрд╕рд╛ рдХрд┐рдпрд╛ рддреЛ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдореЗрд░реА рдХреНрд╡реЗрд░реА рдХреА рдЧрддрд┐ 50% рдХрдо рд╣реЛ рдЧрдИ рд╣реИред

рдЙрдкрд╡рд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЙрдкрд╛рдп рдирд╣реАрдВ рд╣реИред рдореИрдВ рд╕реНрд╡рдпрдВ рд▓рд╛рд░реНрд╡рд╛ рдкреИрдЧрд┐рдиреЗрд╢рди 1000 рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдбрд┐рдЯрд┐рдЯреЗрдмрд▓ рдФрд░ рд╣рдЯрд╛рдП рдЧрдП рдЬрдХреНрд╡реЗрд░реА рдбрд┐рдЯрд┐рдЯреЗрдмрд▓ рдмреЙрдЯрдо рдкреЗрдЬрд┐рдиреЗрд╢рди рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рджред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рд╣реИ

рдмрджрд▓рдиреЗ рдХреЗ:
$brands = Brand::select('id', 'name');
=> $brands = Brand::query();

рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрдкрд╛рдп рд╣реИред

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

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

ghost picture ghost  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sangnguyenplus picture sangnguyenplus  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Mopster picture Mopster  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

FilipeBorges1993 picture FilipeBorges1993  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jackrsantana picture jackrsantana  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ