ホームページ >PHPフレームワーク >Laravel >laravelクエリは1対多をキャンセルします

laravelクエリは1対多をキャンセルします

WBOY
WBOYオリジナル
2023-05-29 14:49:08725ブラウズ

Laravel は、最も人気のあるオープン ソースの PHP Web アプリケーション フレームワークの 1 つであり、その使いやすさ、効率性、柔軟性により、Laravel を使用して高品質の Web アプリケーションを作成する開発者が増えています。

Laravel では、1 対多のデー​​タ関係、つまりマスター テーブルと複数のスレーブ テーブル間の関係がよく発生します。この関係は、データベース内の外部キーを通じて実現できます。 Laravel では、Eloquent ORM (オブジェクト リレーショナル マッピング) を使用して、1 対多のデー​​タ クエリ操作を簡単に実行できます。この記事では主に、Laravelで1対多のデー​​タリレーションシップをクエリおよびキャンセルする方法を紹介します。

1. 1 対多のデー​​タ関係をクエリする

Laravel では、Eloquent ORM を使用して 1 対多のデー​​タ関係をクエリできます。まず、対応するモデルと関係を定義する必要があります。たとえば、「users」テーブルと「orders」テーブルがあります。各ユーザーは複数の注文を持つことができます。これを表すためにユーザー モデルでorders() メソッドを定義できます。 1 対多の関係:

class User extends Model
{
    /**
     * 获取与用户相关联的所有订单。
     */
    public function orders()
    {
        return $this->hasMany('AppOrder');
    }
}

上記のコードでは、hasMany() メソッドを使用して、ユーザーに関連付けられたすべての注文を定義します。このメソッドは 2 つのパラメーターを受け取ります。最初のパラメーターはスレーブ モデルです。 name の 2 番目のパラメータは外部キーの名前です (デフォルトでは、外部キー名は依存モデルの名前に _id を加えたものです)。次に、次のように order() メソッドを使用して、ユーザーに関連付けられたすべての注文をクエリします。

$user = User::find(1);

// 获取与用户相关联的所有订单
$orders = $user->orders;

上記のコードでは、最初に find() メソッドを使用して、ID 1 のユーザー オブジェクトの注文を検索します。次に $user->orders を使用して、そのユーザーに関連付けられたすべての注文を取得します。

注文をさらにフィルタリングする必要がある場合は、クエリ ビルダーを使用してクエリをフィルタリングできます。例:

// 获取与用户相关联的价格超过10元的订单
$orders = $user->orders()->where('price', '>', 10)->get();

上記のコードでは、where() メソッドを使用して、注文金額 10元以上の注文。

2. 1 対多のデー​​タ関係をキャンセルする

Laravel では、マスター テーブルとスレーブ テーブル間の 1 対多の関係をキャンセルする必要がある場合があります。たとえば、注文をユーザーに従属させ、関連付けを解除できます。

Laravel では、外部キーを null に設定することで、レコードとその依存モデルの間の関係をキャンセルできます。たとえば、ID 1 の注文を ID 2 のユーザーに従属させたい場合は、次のように実行できます。

$order = Order::find(1);

// 取消该订单与之关联的用户
$order->user_id = null;
$order->save();

上記のコードでは、最初に find() メソッドを使用して、 1 の注文オブジェクトの ID を指定し、注文の user_id 属性を null に設定し、最後に save() メソッドを使用して変更を保存します。

ユーザーとそれに関連付けられたすべての注文との間の関係をキャンセルする必要がある場合は、次のように行うことができます:

$user = User::find(1);

// 取消该用户与相关联订单之间的关系
$user->orders()->update(['user_id' => null]);

上記のコードでは、最初に find() メソッドを使用します。 ID 1 のユーザー オブジェクトを検索し、orders() メソッドを使用してユーザーに関連付けられたすべての注文を取得し、次に update() メソッドを使用してすべての注文の user_id 属性を null に設定します。

3. 概要

Laravel では、Eloquent ORM を使用して 1 対多のデー​​タ クエリ操作を簡単に実行できます。通常、対応するモデルとリレーションシップを定義することで 1 対多のデー​​タ リレーションシップを実装でき、クエリ時にクエリ ビルダーを使用してデータをさらにフィルタリングできます。同時に、通常は外部キーを null に設定することで、マスター テーブルとスレーブ テーブル間の 1 対多の関係をキャンセルすることもできます。 Laravel アプリケーションを作成するときは、開発効率と作成されたコードの品質を向上させるために、Eloquent ORM の機能を最大限に活用する必要があります。

以上がlaravelクエリは1対多をキャンセルしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。