Laravelの雄弁な関係のための秘訣

Laravelの強みの1つは、そのエレガントな構文です。 Laravelに多くのモデルと関係がある場合(データベース内のテーブルが多いため)、トラバースはあまり洗練されていないコードで終わることがよくあります。 時間の経過とともに、3つの小さな拡張機能が私に証明されました。これを以下に簡単に紹介します。 いくつかの継承、魔法の方法、カスタムコレクションを使用するだけです。


まず、 app \ ConvenienceModel.phpの下に新しいモデルを作成します:

b45e29b9125c2ab565b5526442437686

次に、すべてのモデルに新しいConvenienceModelを継承させます:

b45e29b9125c2ab565b5526442437686

独自の機能と関係を組み合わせる

接続されたモデルを取得する場合は、標準の構文を使用してモデルを呼び出します:

b45e29b9125c2ab565b5526442437686

ここで独自のビジネスロジックを追加する場合は、(下の)ラクダケース表記を使用します。:

b45e29b9125c2ab565b5526442437686

両方のバリアントの構文を標準化する必要があります。 これを行うには、魔法のメソッド__callConvenienceModelに追加します:

b45e29b9125c2ab565b5526442437686

したがって、この呼び出しは上記の例でも可能です。:

b45e29b9125c2ab565b5526442437686

空のオブジェクトを確認します

国の名前を個人の住所に出力したい場合は、次のコードがよく表示されます。:

b45e29b9125c2ab565b5526442437686

これを防ぐために、我々は、 stringhelperのライブラリをして返すモデルが見つからない場合は、空の空のクラスの特別なオブジェクトを:

b45e29b9125c2ab565b5526442437686

これにより、呼び出しも成功します(この例では、何かが見つかった場合は国の名前が出力され、それ以外の場合はすべて空の文字列が出力されます)。

b45e29b9125c2ab565b5526442437686

ID 42のユーザーが存在しない可能性がある場合もカバーしたい場合は、このための小さなヘルパー関数も作成します。:

b45e29b9125c2ab565b5526442437686

したがって、次の呼び出しは、ユーザーがまったく存在しない場合でも空の文字列を配信します:

b45e29b9125c2ab565b5526442437686

n:m関係を便利にトラバースします

最後に、次のコードを簡略化します:

b45e29b9125c2ab565b5526442437686

このために、カスタムコレクションの可能性を使用します。 まずはコンビニエンスモデルを拡大します:

b45e29b9125c2ab565b5526442437686

次に、ファイルapp \ Helpers \ ConvenienceCollection.phpを作成します。これにより、コレクション内の不明な関数を呼び出すと、コレクション内のすべてのアイテムに対して関数が実行されます。:

b45e29b9125c2ab565b5526442437686

したがって、次のコードを使用して、その人のすべての親のすべてのアドレスのすべての国のすべての名前を出力できます。:

b45e29b9125c2ab565b5526442437686

ただし、次のような呼び出しも可能です:

b45e29b9125c2ab565b5526442437686

複数の列で並べ替え

次の呼び出しは場所でのみ並べ替えられますが、おそらくそれはあなたが望んでいたものではありませんでした:

b45e29b9125c2ab565b5526442437686

ConvenienceCollectionを拡張して、複数の列で並べ替えることができるようにします:

b45e29b9125c2ab565b5526442437686

これで、コレクションをいくつかの列に従って並べ替えることができます。:

b45e29b9125c2ab565b5526442437686

標準の並べ替え

ConvenienceCollectionを別の補助機能で拡張しています:

b45e29b9125c2ab565b5526442437686

これで、各モデルに個別の標準ソート機能を与えることができます:

b45e29b9125c2ab565b5526442437686

これでコレクションを並べ替えることができます:

b45e29b9125c2ab565b5526442437686

オブジェクト名

各モデルはgetLabelメソッドを実装します(getNameはモデルによって異なります):

b45e29b9125c2ab565b5526442437686

これにより、オブジェクトの名前をすばやく簡単に表示できます。 次に、ConvenienceCollectionにsortByLabelヘルパーメソッドを実装できます。:

b45e29b9125c2ab565b5526442437686

空の結果

中間ステップが空の場合、Laravel関数の最初()と最後()は通常ゼロを返します。 したがって、次の呼び出しが常に成功するように、getFirst()とgetLast()を導入します。:

b45e29b9125c2ab565b5526442437686

これにより、__ xが認識する__empty_helperを返送します:

b45e29b9125c2ab565b5526442437686

バック