Laravel Tip – Form::select
Published on by Eric L. Barnes
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 RouteRoute::get('/', function(){ $users = Users::all(); return View::make('home', compact('users'));}); // Home ViewForm::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 is the creator of Laravel News and has been covering Laravel since 2012.