2017-04-09 46 views
0

我一直在阅读一段时间Nette数据库选择教程等,但我仍然不明白,Nette如何知道,什么是外键,什么不是。我需要定义它吗?如果是这样,怎么样?文档中没有任何关于它的内容。根据这个documentation,我不必定义外键。由于我习惯了Java JPA,这听起来有点奇怪。如何在Nette中配置外键?

Nette是否生成数据库? (到目前为止,我不这么认为)。

回答

1

•奈特\数据库不会生成数据库,它会检查数据库,并发现了外键 - 见ActiveRow文档,特别是M:1 relation说明:

有一个关系是一种常见的用例。图书有一个作者。图书有一个翻译器。获取相关行主要通过ref()方法完成。 Ref()方法接受两个参数:目标表名和源连接列。见例如:

$book = $context->table('book')->get(1); 
$book->ref('author', 'author_id'); 

[...]

所有这一切都很好,但它有点麻烦,你不觉得吗?数据库已经包含外键定义,为什么不自动使用它们?让我们来做!

如果我们调用不存在的属性,ActiveRow会尝试将调用属性名称解析为“有一个”关系。 [强调我的]获取这个属性和使用一个参数调用ref()方法是一样的。我们将称唯一的论点是关键。密钥将被解析为特定的外键关系。传递的键与行列匹配,如果匹配,则匹配列上定义的外键用于从相关目标表中获取数据。

你可以看到它是如何在source code内部工作的。