Laravelで関連付けによる並び替えをする方法


まず、関連付けを定義する必要があります。例えば、注文(Order)モデルと商品(Product)モデルの関連付けを考えましょう。注文モデルには、商品に対するリレーションシップが定義されている必要があります。

// Orderモデル
public function products()
{
    return $this->hasMany(Product::class);
}

このように、Orderモデルにproducts()メソッドを定義し、hasMany()メソッドを使用してProductモデルとのリレーションシップを定義します。

次に、関連するモデルの並び替えを行う方法を見てみましょう。

// 注文を価格で昇順に並び替える例
$orders = Order::with('products')->orderBy('price')->get();

上記の例では、with()メソッドを使用して関連する商品を一緒にロードし、orderBy()メソッドを使用してpriceカラムを基準に注文を昇順に並び替えています。

もうひとつの例を見てみましょう。

// 注文を商品名で降順に並び替える例
$orders = Order::with('products')->orderByDesc('products.name')->get();

この例では、orderByDesc()メソッドを使用してproductsテーブルのnameカラムを基準に注文を降順に並び替えています。

これらの例では、関連するモデルのリレーションシップを定義し、orderBy()メソッドまたはorderByDesc()メソッドを使用して並び替えの基準を指定しています。

上記のコード例を使って、Laravelで関連付けによる並び替えを実装することができます。必要に応じて、他のカラムや条件を使用して並び替えを行うこともできます。