As the title indicates, when the child model is updated, the timestamp of the parent model can be triggered. For example Comment
belongs to Post
, sometimes it is useful to update the child model causing the parent model timestamp to be updated. For example, when the Comment
model is updated, you want to automatically trigger an update of the Updated_at
timestamp of the parent Post
model. Eloquent
Make it easy, just add a touch
attribute containing the name of the child model relationship.
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Comment extends Model { /** * 涉及到的所有关联关系。 * * @var array */ protected $touches = ['post']; /** * 获取评论所属的文章。 */ public function post() { return $this->belongsTo('App\Post'); } }
When using preloading, you can get the specified columns from the relationship.
$users = App\Book::with('author:id,name')->get();
You can use Auth::once()
to authenticate the user for a single request, this method will not use Cookie
Session. This means that this method may be useful for building stateless API.
if (Auth::once($credentials)) { // }
You can not only use the redirect()
method with user-specific URLs or routes, It can also be used in methods with parameters in the controller.
return redirect()->action('SomeController@method', ['param' => $value]);
withDefault()
to avoid errors in relationshipsWhen a relationship is called, a fatal error occurs if it does not exist Errors, such as $post->user->name
, can be avoided using withDefault()
.
/** 获取文章作者 */ public function user() { return $this->belongsTo('App\User')->withDefault(); }
$loop
variables are in foreach
of blade
, Even in two loops, you can still get the parent variable by using the $loop
variable.
@foreach ($users as $user) @foreach ($user->posts as $post) @if ($loop->parent->first) This is first iteration of the parent loop. @endif @endforeach @endforeach
After executing the Eloqument
query, you can use map()
to modify the rows.
$users = User::where('role_id', 1)->get()->map(function (User $user) { $user->some_column = some_function($user); return $user; });
dd()
Add $test->dd() at the end of
Eloqument
, instead of dd($result)
.
// 优化前 $users = User::where('name', 'Taylor')->get(); dd($users); // 优化后 $users = User::where('name', 'Taylor')->get()->dd();
If there is a hasMany()
relationship and you want to save many subclass objects from the parent class object, you can use saveMany()
to achieve the effect you want.
$post = Post::find(1); $post->comments()->saveMany([ new Comment(['message' => 'First comment']), new Comment(['message' => 'Second comment']), ]);
Model::all()
When you use Eloqument
's Model::all( )
, you can specify the columns to be returned.
$users = User::all(['id', 'name', 'email']);
@auth
in You can use the @auth
directive instead of if
statement to check if the user is authenticated.
@if(auth()->user()) // The user is authenticated. @endif
@auth // The user is authenticated. @endauth
If you use Mailables to send your emails, you can preview them without sending them.
Route::get('/mailable', function () { $invoice = App\Invoice::find(1); return new App\Mail\InvoicePaid($invoice); });
hasMany
In the hasMany()
relationship of Eloquent
you can filter out Records with n number of sub-records.
// Author -> hasMany(Book::class) $authors = Author::has('books', '>', 5)->get();
If the records use soft deletion, then you can restore multiple soft deleted records at one time.
Post::withTrashed()->where('author_id', 1)->restore();
The migration file not only has timestamps()
timestamps, but also timestampsTz()
with time zone timestamp.
Schema::create('employees', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email'); $table->timestampsTz(); });
Did you know you can also check if a view file exists?
if (view()->exists('custom.page')) { // Load the view }
In the routing file, you can create a group for a routing group and specify specific middleware for it.
Route::group(['prefix' => 'account', 'as' => 'account.'], function() { Route::get('login', 'AccountController@login'); Route::get('register', 'AccountController@register'); Route::group(['middleware' => 'auth'], function() { Route::get('edit', 'AccountController@edit'); }); });
Eloquent
whereDay()
, whereMonth()
, whereYear()
, whereDate()
, whereTime()
These methods are all methods for checking dates in Eloquent
.
$products = Product::whereDate('created_at', '2018-01-31')->get(); $products = Product::whereMonth('created_at', '12')->get(); $products = Product::whereDay('created_at', '31')->get(); $products = Product::whereYear('created_at', date('Y'))->get(); $products = Product::whereTime('created_at', '=', '14:13:58')->get();
orderBy() in the
Eloquent relationship
You can specify # directly in the Eloquent
relationship ##orderBy() .
public function products() { return $this->hasMany(Product::class); } public function productsByName() { return $this->hasMany(Product::class)->orderBy('name'); }
integer(), but use
unsignedInteger() or It is
integer()->unsigned(), otherwise a series of errors will occur.
Schema::create('employees', function (Blueprint $table) { $table->unsignedInteger('company_id'); $table->foreign('company_id')->references('id')->on('companies'); });
Laravel Tutorial column to learn!
The above is the detailed content of Some tips when using Laravel. For more information, please follow other related articles on the PHP Chinese website!