yiiは、特に1対多で多数の関係を扱う場合、リレーショナルデータベースとの作業を簡素化するGIIと呼ばれる堅牢なオブジェクト関連マッパー(ORM)を提供します。これらの関係は、ActiverCordを使用してモデルクラス内で定義されます。たとえば、 author
モデルには、 book
モデルがたくさんある場合があります。これを hasmany()
メソッドを使用して author
モデルで定義します。 yiiを使用してください。 yii \ db \ activerecordを使用します。クラス著者はActivereCordを拡張します{public static function tableName(){return 'authors'; } public function getBooks(){return $ this-> hasmany(book :: classname()、['author_id' => 'id']); }}
この例では、 getBooks()
は関係を定義します。 book :: classname()
関連モデルを指定し、 ['author_id' => 'id']
auther_id
books
テーブルの外部キーを id
authors
テーブルのプライマリキーにマップします。これで、このような著者の本にアクセスできます。 $ author-> books
。たとえば、A sudent
モデルは多くの course
モデルに登録されている可能性があり、 course
モデルには多くの学生
モデルがある場合があります。これには、2つのテーブルをリンクするためのジャンクションテーブル(例: suduent_course
)が必要です。
<code class="php">&lt; yiiを使用してください。 yii \ db \ activerecordを使用します。クラスの学生はActivereCordを拡張します{public static関数tableName(){return 'sustent'; } public function getCourses(){return $ this-&gt; hasmany(course :: classname()、['id' =&gt; 'course_id']) - &gt; viatable( 'sudent_course'、['desudent_id' =&gt; 'id']); }}&lt;?php namespace app \ models; yiiを使用してください。 yii \ db \ activerecordを使用します。クラスコースはActiverCordを拡張します{public static関数tableName(){return 'courses'; } public function getStudents(){return $ this-&gt; hasmany(sudent :: classname()、['id' =&gt; 'sudent_id']) - &gt; viatable( 'sudent_course'、['course_id' =&gt; 'id']); }} </code>
ここに、 viatable()
ジャンクションテーブルと外部キーマッピングを指定します。 $ sudute-&gt;コース
と $ course-&gt; dustort
。データベースの相互作用を抽象化する。これにより、コードの読みやすさと保守性が向上します。
getbooks()
、 getCourses()
)。 ( with()
method)単一のクエリで関連データを取得します。例: $著者=著者:: findone(1) - &gt;たとえば、本が著者に属しているか、学生がコースに登録されているかどうかを確認します。
$ author-&gt; books() - &gt; where(['&gt;'、 'publication_date'、 '2023-01-01']); all();
crud(作成、読み取り、更新、削除、削除)関連データの操作には、データの一貫性を維持するために慎重に処理する必要があります。
author_id
トランザクションを使用してデータの一貫性を確保します。 deleteall()
を使用するか、データの不一致を防ぐためにトランザクション内で削除プロセスを慎重に処理することを検討してください。特定のテーブルとモデル名を一致させるようにこれらの例を調整することを忘れないでください。常にコードを徹底的にテストして、データの整合性とパフォーマンスを確保してください。
以上がYIIのリレーショナルデータベース(1対多、多目的)で動作するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。