Laravel は、最新の Web アプリケーションを構築するための便利なツールや機能を多数提供する人気の PHP Web フレームワークです。 Laravel では、Eloquent ORM (オブジェクト リレーショナル マッピング) を使用してデータベース内のデータを管理できます。このデータベースレベルのライブラリは、Laravel フレームワークの非常に重要な部分であると言え、バックエンド プログラムのデータ管理を担当します。 Laravel では、モデルを定義することでさまざまな種類のデータを管理でき、モデル間の関係を通じてデータを整理したりクエリしたりできます。今日は、Laravel でモデル間の関係を使用して、さまざまなタイプのデータに対応するさまざまなテーブルを処理する方法について説明します。
ほとんどの Web アプリケーションでは、通常、データをユーザー データ、製品データ、記事データなどのさまざまな種類に分割する必要があります。従来のデータベース設計では、通常、データの種類ごとに個別のテーブルが作成されるため、データベース テーブルの数が増加する可能性があります。しかし、Laravel では、データベースにテーブルを直接作成するのではなく、モデルを構築することでさまざまなタイプのデータを表すことができます。このようにして、データの編成とクエリを実現できるだけでなく、データベース テーブルが多すぎることによって引き起こされる問題も回避できます。しかし、プログラム内で特定の種類のデータを検索する必要がある場合、それらが正しいテーブルに対応していることを確認するにはどうすればよいでしょうか?
Laravel では、データの種類ごとに異なるモデルを定義することで、この問題を解決できます。たとえば、アプリケーションにはユーザー データ、アイテム データ、記事データが含まれています。対応するモデルは、User
、Product
、Post
の各タイプのデータに対して作成できます。これらのモデルは、さまざまな Eloquent 機能を使用するために、extends
キーワードを通じて Laravel の Model
クラスを継承できます。
ただし、モデル内でどのデータ テーブルがそれに対応するかを定義する必要もあります。デフォルトでは、Laravel はモデル名を小文字に変換し、テーブル名として複数形にします。たとえば、User
モデルはデフォルトで users
テーブルになり、Product
モデルはデフォルトで products
テーブルになります。ほとんどの場合、このデフォルトの動作で十分です。ただし、別のテーブル名を使用する必要がある場合は、特定のルールに従ってテーブル名をカスタマイズすることもできます。
まず、モデルの $table
属性を使用して、使用するテーブル名を指定します。たとえば、次のコードを User
モデルに追加できます:
class User extends Model { protected $table = 'my_users'; }
これにより、User
モデルは代わりに my_users
テーブルを使用します。デフォルトの users
テーブルの。
2 番目に、複数のモデルで同じテーブルを使用する必要がある場合は、$table
属性を使用してテーブル名のベース名を指定し、Laravel の規則を使用してテーブル名を指定します。実際のテーブル名 テーブル名。たとえば、アプリケーションでユーザー データを管理するために 2 つの異なるモデル (Web サイト ユーザー用とモバイル アプリ ユーザー用) を使用する必要があるとします。この場合、テーブル名を users
に設定し、モデル内で別のサフィックスを使用して実際のテーブル名を示すことができます。たとえば、WebsiteUser
モデルは $table
プロパティを 'users_website'
に設定でき、AppUser
モデルは ## を設定できます。 #$table 属性は
'users_app' に設定されます。このように、Laravel はモデルのサフィックスに基づいてテーブル名を自動的に連結し、データを正しいテーブルに保存します。
Comment モデルを作成できます。この関係は多態性の関連付けです。
Comment モデルにポリモーフィックな関連付けを実装するには、Laravel のポリモーフィック規約を使用する必要があります。ポリモーフィックな関連付けを行う場合、関連付けられるモデルの 2 つのプロパティ、
morphTo と
morphMany を定義する必要があります。
morphTo 属性は、モデルが所有するポリモーフィックな関連付けを示し、他のモデルで参照できるように名前を指定する必要があります。
morphMany 属性は、別のモデルが所有するポリモーフィックな関連付けを示し、関連付けられているモデルとそれが指す名前を指定する必要があります。相関名は、後続のクエリで参照できるように、両方のプロパティで定義する必要があります。例:
class Comment extends Model { public function commentable() { return $this->morphTo(); } } class User extends Model { public function comments() { return $this->morphMany('AppComment', 'commentable'); } } class Product extends Model { public function comments() { return $this->morphMany('AppComment', 'commentable'); } } class Post extends Model { public function comments() { return $this->morphMany('AppComment', 'commentable'); } }
commentable_type と
commentable_id の関係を使用して、コメントがどのモデルに属しているかを判断できます。たとえば、
Product モデルのすべてのレビューをクエリするには、次のコードを使用します:
$product = Product::find(1); $comments = $product->comments()->get();
以上が異なるタイプのlaravelは異なるテーブルに対応しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。