MedicOneSystems / livewire-datatables

Advanced datatables using Laravel, Livewire, Tailwind CSS and Alpine JS
https://livewire-datatables.com/
MIT License
1.19k stars 258 forks source link

Avoid queries in columns method #489

Closed andrecuellar closed 2 years ago

andrecuellar commented 2 years ago

Hello, I have this column

    public function builder()
    {
        return Muse::query();
    }

///
Column::callback(['user.username'], function ($username) {
                $user = User::where('username', $username)->first();
                return view('admin::datatable.username-column', [
                    'user' => $user
                ]);
            })

So I want to avoid the query inside that callback User::where('username', $username)->first();

How can I do? Is possible to get user like $query->user()? User is realted to Muse

andrecuellar commented 2 years ago

Ok, I did this

public function columns()
    {
        $users = $this->builder()->get()->pluck('user');
        return [
            Column::callback(['user.username'], function ($username) use ($users) {
                return view('admin::datatable.username-column', [
                    'user' => $users->filter(function ($user) use ($username){
                      return $user->username == $username;
                    })->first()
                ]);
            })
........

The number of queries was down from 33 to 25