Laravelの強みの1つは、そのエレガントな構文です。 Laravelに多くのモデルと関係がある場合(データベース内のテーブルが多いため)、トラバースはあまり洗練されていないコードで終わることがよくあります。 時間の経過とともに、3つの小さな拡張機能が私に証明されました。これを以下に簡単に紹介します。 いくつかの継承、魔法の方法、カスタムコレクションを使用するだけです。
まず、 app \ ConvenienceModel.phpの下に新しいモデルを作成します:
b45e29b9125c2ab565b5526442437686
次に、すべてのモデルに新しいConvenienceModelを継承させます:
b45e29b9125c2ab565b5526442437686
独自の機能と関係を組み合わせる
接続されたモデルを取得する場合は、標準の構文を使用してモデルを呼び出します:
b45e29b9125c2ab565b5526442437686
ここで独自のビジネスロジックを追加する場合は、(下の)ラクダケース表記を使用します。:
b45e29b9125c2ab565b5526442437686
両方のバリアントの構文を標準化する必要があります。 これを行うには、魔法のメソッド__callをConvenienceModelに追加します:
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