yii提供了一个强大的对象相关的映射器(ORM),称为GII,简化了与关系数据库的工作,尤其是在与一对一和许多对象的关系交易时。这些关系是在模型类中使用activerecord定义的。
一对多关系:这代表了一个场景,其中表中的一个记录可以与另一表中的多个记录相关联。例如,作者
模型可能具有许多 book
模型。您可以在作者
模型中使用 hasmany()
方法来定义此内容:
<pre class="brush:php;toolbar:false"> <code class="“" php>&lt;?php namespace app \ models;使用yii;使用yii \ db \ activerecord;班级作者扩展了ActiverEcord {public static函数tableName(){返回'authors'; } public函数getBooks(){return $ this-&gt; hasmany(book :: className(),['ruter_id'=&gt;'id'']); }} </code>
在此示例中, getBooks()
定义了关系。 book :: className()
指定相关模型, ['rutian_id'=&gt; 'id']
映射 furetion_id
books
表中的外键 id> ID
author> authors
表中的主键。现在,您可以访问作者的书籍: $ ture-&gt; books
。
多次 - 多次的关系:这代表了一个场景,其中一个表中的记录可以与另一表中的多个记录相关联,而反之亦然。例如, Student
模型可能已在许多课程
模型中注册,并且课程
模型可能具有许多 Student
模型。这需要一个接线表(例如, student_course
)才能链接两个表。
<pre class="brush:php;toolbar:false"> <code class="“" php>&lt;?php namespace app \ models;使用yii;使用yii \ db \ activerecord;班级学生扩展ActiverEcord {public static函数tableName(){返回“学生”; } public函数getCourses(){return $ this-&gt; hasmany(Course :: className(),['id''=&gt;'cource_id']) - &gt; viatable('supidayt_course',['supentity_id'susteman_id'=&gt'=&gt; did'']); }}&lt;?php namespap app \ models;使用yii;使用yii \ db \ activerecord;类课程扩展ActiverEcord {public static函数tableName(){返回'courses'; } public函数getStudents(){返回$ this-&gt; hasmany(student :: className(),['id''=&gt;'sut剂_id'])) - &gt; viatable('supidayt_course',['courose_id'''cource_id'=&gt; did'']); }} </code>
在此, viatable()
指定接线表和外键映射。您可以使用 $学生 - &gt;课程访问学生的课程
和课程的学生使用 $ Cource-&gut-&gt-&gt-&code>。
getbooks()
, getcourses(getcourses())并确保准确的外键映射。 (带()方法)在单个查询中获取相关数据。例如: $ wuter = rutian :: findOne(1) - &gt;带有('books') - &gt;一个();
此检索一个数据库查询中的作者及其书籍。
with()
对于避免n 1 n 1个查询至关重要。在检索相关数据时,这显着提高了性能。其中()
和其他查询构建方法来过滤相关数据。 For example, to get an author's books published after a specific date: $author->books()->where(['>', 'publication_date', '2023-01-01'])->all();
crud(创建,读取,更新,删除)相关数据的操作需要仔细处理以维持数据一致性。
furet_id
。 with(()
)以有效检索相关数据。 deleteall()
或仔细处理交易中的删除过程以防止数据不一致。记住要调整这些示例以匹配您的特定表格和模型名称。始终彻底测试您的代码以确保数据完整性和性能。
以上是我如何与yii(一对一,多对多)中的关系数据库合作?的详细内容。更多信息请关注PHP中文网其他相关文章!