Как настроить внешние ключи в Nette?

Некоторое время я читал учебник Nette по выбору базы данных и т. Д., Но до сих пор не понимаю, откуда Nette узнает, что такое внешний ключ, а что нет. Мне нужно определить это? Если так, то как? Там нет ничего об этом в документации.

Согласно этой документации, мне не нужно определять внешние ключи. Поскольку я привык к Java JPA, это звучит немного странно для меня.

Nette даже генерирует базу данных? (Пока что я так не думаю).

1 ответ

Решение

Nette\Database не создает базу данных, она проверяет базу данных и обнаруживает внешние ключи - см. Документацию ActiveRow, в частности описание отношения M:1:

Имеет одно отношение - это общий вариант использования. Книга имеет одного автора. Книга имеет одного переводчика. Получение связанной строки в основном выполняется ref() метод. Метод Ref() принимает два аргумента: имя целевой таблицы и столбец соединения с источником. Смотрите пример:

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

[...]

Все это хорошо, но несколько громоздко, не правда ли? База данных уже содержит определения внешних ключей, так почему бы не использовать их автоматически? Давайте сделаем это!

Если мы вызываем свойство, которого не существует, ActiveRow пытается разрешить имя вызывающего свойства как "имеет одно" отношение. [выделение мое] Получение этого свойства аналогично вызову метода ref() только с одним аргументом. Мы будем называть единственный аргумент ключом. Ключ будет разрешен для конкретного отношения внешнего ключа. Переданный ключ сопоставляется со столбцами строки, и, если он совпадает, внешний ключ, определенный в сопоставленном столбце, используется для получения данных из связанной целевой таблицы.

Вы можете увидеть, как это работает внутри, в исходном коде.

Другие вопросы по тегам