Laravel を使用する際のヒント

步履不停
リリース: 2019-06-28 16:12:48
オリジナル
3694 人が閲覧しました

Laravel を使用する際のヒント

01: 親モデルのタイムスタンプをトリガーする

タイトルが示すように、子モデルが更新されたときに、親モデルのタイムスタンプをトリガーできます。たとえば、CommentPost に属しており、子モデルを更新して親モデルのタイムスタンプを更新すると便利な場合があります。たとえば、Comment モデルが更新されたときに、親の Post モデルの Updated_at タイムスタンプの更新を自動的にトリガーしたいとします。 Eloquent 作り方は簡単です。子モデルのリレーションシップの名前を含む touch 属性を追加するだけです。

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
    /**
     * 涉及到的所有关联关系。
     *
     * @var array
     */
    protected $touches = [&#39;post&#39;];
    /**
     * 获取评论所属的文章。
     */
    public function post()
    {
        return $this->belongsTo('App\Post');
    }
}
ログイン後にコピー

02: 正確な列のプリロード

プリロードを使用すると、リレーションシップから指定された列を取得できます。

$users = App\Book::with('author:id,name')->get();
ログイン後にコピー

03: 単一リクエストのユーザーを認証する

Auth::once() を使用して単一リクエストのユーザーを認証できますが、このメソッドは認証しません。 Cookie セッションを使用します。これは、このメソッドがステートレス API の構築に役立つ可能性があることを意味します。

if (Auth::once($credentials)) {
    //
}
ログイン後にコピー

04: パラメーターを使用したコントローラー メソッドへのリダイレクト

ユーザー固有の URL またはルートで redirect() メソッドを使用できるだけでなく、コントローラー内のパラメーターを持つメソッドで使用されます。

return redirect()->action('SomeController@method', ['param' => $value]);
ログイン後にコピー

05: withDefault() を使用してリレーションシップのエラーを回避する方法

リレーションシップが呼び出されたとき、リレーションシップが存在しない場合は致命的なエラーが発生します。 $post->user->name のように、withDefault() を使用することは回避できます。

/** 获取文章作者 */ 
public function user() 
{     
    return $this->belongsTo('App\User')->withDefault(); 
}
ログイン後にコピー

06: テンプレートでは、2 つの並列 $loop 変数

bladeforeach にあります。 2 つのループがある場合でも、$loop 変数を使用して親変数を取得できます。

@foreach ($users as $user)     
    @foreach ($user->posts as $post)         
        @if ($loop->parent->first)             
            This is first iteration of the parent loop.         
        @endif     
    @endforeach 
@endforeach
ログイン後にコピー

07: クエリ結果の変更

Eloqument クエリの実行後、map() を使用して行を変更できます。

$users = User::where('role_id', 1)->get()->map(function (User $user) {
    $user->some_column = some_function($user);
    return $user;
});
ログイン後にコピー

08: dd()

Eloqument の最後に $test->dd() を簡単に使用します dd($result) の代わりに。

// 优化前
$users = User::where('name', 'Taylor')->get();
dd($users);
// 优化后
$users = User::where('name', 'Taylor')->get()->dd();
ログイン後にコピー

09: hasMany を使用してMany を保存します。

hasMany() リレーションシップがあり、親クラス オブジェクトから多くのサブクラス オブジェクトを保存したい場合は、次のようにすることができます。 saveMany() を使用して、必要な効果を実現します。

$post = Post::find(1);
$post->comments()->saveMany([
    new Comment(['message' => 'First comment']),
    new Comment(['message' => 'Second comment']),
]);
ログイン後にコピー

10: Model::all() での列の指定

EloqumentModel::all( ) では、返される列を指定できます。

$users = User::all(['id', 'name', 'email']);
ログイン後にコピー

11: Blade@auth

if の代わりに @auth ディレクティブを使用できます。 ステートメントを使用して、ユーザーが認証されているかどうかを確認します。

一般的な方法:
@if(auth()->user())     // The user is authenticated. @endif
ログイン後にコピー
短い方法:
@auth    
 // The user is authenticated. 
@endauth
ログイン後にコピー

12: 送信せずにメールをプレビューする

Mailables## を使用して送信する場合メールを送信せずにプレビューすることができます。

Route::get('/mailable', function () {
    $invoice = App\Invoice::find(1);
    return new App\Mail\InvoicePaid($invoice);
});
ログイン後にコピー
13:

hasMany

の特定のチェック

EloquenthasMany() 関係では、レコードをフィルターで除外できます。 n 個のサブレコードを持ちます。

// Author -> hasMany(Book::class) 
$authors = Author::has('books', '>', 5)->get();
ログイン後にコピー
14: 複数の論理的な削除の復元

レコードで論理的な削除が使用されている場合は、複数の論理的に削除されたレコードを一度に復元できます。

Post::withTrashed()->where('author_id', 1)->restore();
ログイン後にコピー
15: タイムゾーンを含む移行列

移行ファイルには、

timestamps() タイムスタンプだけでなく、時間付き timestampsTz() も含まれています。ゾーンのタイムスタンプ。

Schema::create('employees', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('email');
    $table->timestampsTz();
});
ログイン後にコピー
16: ビュー ファイルは存在しますか?

ビュー ファイルが存在するかどうかを確認することもできることをご存知ですか?

if (view()->exists('custom.page')) {
    // Load the view
}
ログイン後にコピー
17: グループ内のルーティング グループ

ルーティング ファイルでは、ルーティング グループのグループを作成し、そのグループに特定のミドルウェアを指定できます。

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');     
    });
});
ログイン後にコピー
18:

Eloquent

whereDay()whereMonth() の日付と時刻のメソッドwhere Year()whereDate()whereTime() これらのメソッドはすべて、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();
ログイン後にコピー
19:

Eloquent 関係での orderBy() の使用

Eloquent 関係で # を直接指定できます。 ##orderBy()<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">public function products() {     return $this-&gt;hasMany(Product::class); } public function productsByName() {     return $this-&gt;hasMany(Product::class)-&gt;orderBy('name'); }</pre><div class="contentsignin">ログイン後にコピー</div></div>20: 符号なし整数

移行された外部キーの場合は、

integer()

を使用せず、unsignedInteger() または # を使用してください。 ##integer()->unsigned() としないと、一連のエラーが発生します。

Schema::create('employees', function (Blueprint $table) {     
    $table->unsignedInteger('company_id');     
    $table->foreign('company_id')->references('id')->on('companies');     
});
ログイン後にコピー
Laravel 関連の技術記事の詳細については、Laravel チュートリアル 列にアクセスして学習してください。

以上がLaravel を使用する際のヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!