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