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

Laravelの強みの 1 つは、そのエレガントな構文です。 Laravel に多数のモデルとリレーションシップがある場合 (データベース内に多数のテーブルがあるため)、走査は多くの場合、エレガントではないコードで終了する可能性があります。時間が経つにつれて、3 つの小さな拡張機能が私にとって成功していることが証明されました。以下に簡単に紹介したいと思います。これを行うには、いくつかの継承、魔法のメソッド、カスタム コレクションを使用するだけです。


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

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

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

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

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

この呼び出しは上記の例でも可能です:

b45e29b9125c2ab565b5526442437686

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

個人の住所の国名を出力したい場合、次のようなコードがよく見られます。:

b45e29b9125c2ab565b5526442437686

これを防ぐため、 stringhelperライブラリを組み込み、モデルが見つからない場合は空のクラス`empty`の特別なオブジェクトを返します。:

b45e29b9125c2ab565b5526442437686

これは、呼び出しが成功したことを意味します (この例では、何かが見つかった場合は国名が出力され、それ以外の場合は空の文字列が出力されます)。:

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

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

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

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

次に、 app\Helpers\ConvenienceCollection.phpファイルを作成します。このファイルは、Collections で未知の関数が呼び出された場合に、その関数がコレクション内のすべてのアイテムに対して実行されるようにします。:

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

バック