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 →
Pause Polling in Background Tabs in Inertia.js v3.9 image

Pause Polling in Background Tabs in Inertia.js v3.9

Read article
Look What You Helped Me Build image

Look What You Helped Me Build

Read article
BashBox: A Sandboxed Bash Interpreter for AI Agents in PHP image

BashBox: A Sandboxed Bash Interpreter for AI Agents in PHP

Read article
Running Laravel's Scheduler on Multiple Servers image

Running Laravel's Scheduler on Multiple Servers

Read article
Laravel Fake Assertions Now Accept Property Arrays image

Laravel Fake Assertions Now Accept Property Arrays

Read article
Route::query() and Model defaults() in Laravel 13.35 image

Route::query() and Model defaults() in Laravel 13.35

Read article