我一直在阅读一段时间Nette数据库选择教程等,但我仍然不明白,Nette如何知道,什么是外键,什么不是。我需要定义它吗?如果是这样,怎么样?文档中没有任何关于它的内容。根据这个documentation,我不必定义外键。由于我习惯了Java JPA,这听起来有点奇怪。如何在Nette中配置外键?
Nette是否生成数据库? (到目前为止,我不这么认为)。
我一直在阅读一段时间Nette数据库选择教程等,但我仍然不明白,Nette如何知道,什么是外键,什么不是。我需要定义它吗?如果是这样,怎么样?文档中没有任何关于它的内容。根据这个documentation,我不必定义外键。由于我习惯了Java JPA,这听起来有点奇怪。如何在Nette中配置外键?
Nette是否生成数据库? (到目前为止,我不这么认为)。
•奈特\数据库不会生成数据库,它会检查数据库,并发现了外键 - 见ActiveRow文档,特别是M:1 relation说明:
有一个关系是一种常见的用例。图书有一个作者。图书有一个翻译器。获取相关行主要通过
ref()
方法完成。 Ref()方法接受两个参数:目标表名和源连接列。见例如:$book = $context->table('book')->get(1); $book->ref('author', 'author_id');
[...]
所有这一切都很好,但它有点麻烦,你不觉得吗?数据库已经包含外键定义,为什么不自动使用它们?让我们来做!
如果我们调用不存在的属性,ActiveRow会尝试将调用属性名称解析为“有一个”关系。 [强调我的]获取这个属性和使用一个参数调用ref()方法是一样的。我们将称唯一的论点是关键。密钥将被解析为特定的外键关系。传递的键与行列匹配,如果匹配,则匹配列上定义的外键用于从相关目标表中获取数据。
你可以看到它是如何在source code内部工作的。