如果我们的情况是标准视图,您有两个表格和三元组,并且可以通过following documentation
轻松管理但是如果我们有三个而不是两个表,然后三元组由3个PrimaryKey组成,那么当我写yml文件时?
情况示例:
以我有一个参与课程的用户为例。
所以我有一个users
表,courses
表和一个users_has_courses
(useri_id,course_id)。
这是多对多的标准情况。
但我也有一个表invoices
,因此有一个表users_courses_invoices
,其中有三个primaykey(user_id,course_id,invoice_id)。
答案 0 :(得分:1)
在您的情况下,您拥有User
和Course
模型,并且它们与多对多关系相关联,并将(user_id, course_id)
对作为关键字。我会调用这个模型订阅,并给它自己的标识符,然后我将这个模型与Invoice
模型链接,所以你的最终方案(最小版本)可能是:
User:
columns:
id:
type: integer
primary: true
Course:
columns:
id:
type: integer
primary: true
Subscription:
columns:
id:
type: integer
primary: true
user_id:
type: integer
notnull: true
course_id:
type: integer
notnull: true
relations:
User:
foreignAlias: Subscriptions
Course:
foreignAlias: Subscriptions
Invoice:
columns:
id:
type: integer
primary: true
subscription_id:
type: integer
notnull: true
relations:
Subscription:
foreignAlias: Subscription
foreignType: One
通过这种方式,您拥有一个规范化的数据库,您可以使用以下代码访问用户和课程的发票:
$user->Subscriptions->getFirst()->Invoice
$course->Subscriptions->getFirst()->Invoice
如果您想要给定用户的所有发票,您可以通过这种方式进行查询
InvoiceTable::getInstance()->createQuery('i')
->select('i.*')
->leftJoin('i.Subscription s')->leftJoin('s.User u')
->where('u.id = ?', $user_id);
如果您想要特定课程的所有发票,同样适用。