This time I would like to share few Laravel quick tips, which I use and it help me to make some things faster and cleaner code.
In Routes, you can create a group within a group. Also, assign a certain middleware only to some of them.
Route::group(['prefix' => 'user', 'as' => 'user.'], function() {
Route::get('login', 'UserController@login');
Route::get('register', 'UserController@register');
Route::group(['middleware' => 'auth'], function() {
Route::get('edit', 'UserController@edit');
});
});
Increment or decrement column value.
// increment by one
Article::find($articleId)->increment('view_count');
// increment by 50
User::find($userId)->increment('points', 50);
No timestamp columns
If you don’t need created_at and updated_at timestamps, you can easily disable them.
class Article extends Model
{
public $timestamps = false;
}
Soft-deletes: multiple restore
If you use soft-delete it’s an easy way to restore multiple records.
Article::withTrashed()->where('author_id', 1)->restore();
Preview email before sending
If you are using Mailables to send emails, you can preview the result without sending them. You can review directly in your browser. Just return a Mailable as route result:
Route::get('/email', function () {
return new App\Mail\InvoicePaid(App\Invoice::find(1));
});
Get view without create Controllers
If you want the route to show a certain view, you don’t need to create a Controller method. You can do it in a simple way:
// Instead of creating controller
Route::get('about', 'PageController@about');
class PageController extends Controller
{
public function about()
{
return view('pages.about');
}
}
// Do this
in your routes file
Route::view('about', 'pages.about');
Check if user is authenticated in blade
Instead of if-statement to check logged in user, we can use @auth.
@auth
// The user is authenticated.
@endauth
The opposite is @guest directive.
@guest
// The user is not authenticated.
@endguest
Column name change
Sometimes you need to change column in your query. In Eloquent Query Builder, you can specify “as” to return any column with a different name. For example:
$items = DB::table('article')
->select('title', 'author_id as article_author_id')
->get();
Return default model
It’s possible to assign a default model in belongsTo relationship, to avoid fatal errors when calling it. For example we need attribute name from user {{ $post->user->name }} and $post->user doesn’t exist. Use function withDefault() like:
public function user()
{
return $this->belongsTo('App\User')->withDefault();
}
Debug query
Did you know that you can use dd() to debug query.
User::where('name', 'Demo')->dd();
Eager loading with specific columns
You can do eager loading with the exact columns you want to get from the relationship.
$articles = App\Article::with('author:id,name')->get();
An easy way to calculate child relationships records
You don’t need to do specific queries to get related records count if you are using hasMany() relationship. Use withCount(). For example:
$users = User::withCount(['posts'])->get();
And then, in your Blade file, access count number with [relationship]_count property.
{{ $user->posts_count }}
Update model dates
If you want to update updated_at field on the database table for the given model.
$article = Article::find($id);
$article->touch();
Capitalize translations parameters values
In translation files it’s possible to specify variables not only as
:variable, but also capitalized as :VARIABLE or :Variable – and then whatever value you pass – will be also capitalized automatically. Magic!
// resources/lang/en/example.php
'welcome' => 'Welcome, :Name'
// Result will be: "Welcome, Demo"
echo __('example.welcome', ['name' => 'demo']);