Laravel Tutorials

Laravel Tip – Form::select

Published

In yesterdays digest I included the tip of using array_pluck with the Form::select helper. I had a few replies and questions about it so I wanted to try and clarify any confusion I may have caused.

In the email I used the following example:

Form::select('user', array_pluck(Users::all(), 'username', 'id');

A few things are wrong with this for any “real” project. You should really never call Users::all() from your view. I did it this way to keep it simple for the email. Ideally in your controller or route you will assign this, pass it to your view, and then call your Form::select. Here is an example:

// Home Route
Route::get('/', function()
{
$users = Users::all();
return View::make('home', compact('users'));
});
 
// Home View
Form::select('user', array_pluck($users, 'username', 'id'));

The question is why use this over the simpler “lists” method? To answer this, both methods are fine and it really depends on the context of your results. Most of the time you are not going to already have a result set so calling the simpler lists method is ideal.

$users = Users::lists('username', 'id');
Form::select('user', $users);

However in certain circumstances you may need all the results for another area. So instead of doing two queries you can pluck from what you already have. For an example of this lets pretend we are building a site to sell books. In the sidebar we have a list of categories to filter and in the main content we have a search bar with an input and category select list.

There is no need to perform two queries for our list of categories. Just do it once and process the same results into the select options.

As with everything in the crazy world of development this is just one solution to a problem. I guarantee the community could come up with at least five more.

Eric L. Barnes photo

Eric is the creator of Laravel News and has been covering Laravel since 2012.

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
PayZephyr: One Payment API for Stripe, Paystack, and PayPal image

PayZephyr: One Payment API for Stripe, Paystack, and PayPal

Read article
Bifrost Turns One With AI Builds and New Workflows image

Bifrost Turns One With AI Builds and New Workflows

Read article
Preview Blade Templates in macOS Finder with Quick Blade image

Preview Blade Templates in macOS Finder with Quick Blade

Read article
Artisan Debugging Commands in Laravel Telescope 5.24.0 image

Artisan Debugging Commands in Laravel Telescope 5.24.0

Read article
Queue totalSize() and JobInterrupted Event in Laravel 13.31 image

Queue totalSize() and JobInterrupted Event in Laravel 13.31

Read article
Find Unexpected Test Inputs with Fuzz for Pest image

Find Unexpected Test Inputs with Fuzz for Pest

Read article