Когда использовать отношения hasMany и belongsTo в обратном цикле 4?

#node.js #loopbackjs

#node.js #loopbackjs

Вопрос:

У меня есть один простой вопрос о цикле 4 и отношениях.

Давайте возьмем, к примеру, официальный пример ToDoList.

В @hasMany есть TodoList.model определение, у меня там нет вопросов. Мой вопрос касается отношения belongsTo, необходимо ли также определять @belongsTo в todo.model ? Всегда ли необходимо определять оба отношения или как я могу узнать, какое из них выбрать? Если необходимо только одно отношение, то почему нужно выбирать два отношения? В чем будут различия, если я выберу одно вместо другого?

У меня много сомнений по этой теме.

Ответ №1:

Оба этих типа отношений, хотя и представляют собой схожий вид отношений, имеют тонкие отличия друг от друга.

Как мы можем видеть из документации здесь,

Отношение hasMany обозначает соединение модели «один ко многим» с другой моделью посредством ссылочной целостности. Ссылочная целостность обеспечивается ограничением внешнего ключа для целевой модели, которая обычно ссылается на первичный ключ в исходной модели. Это отношение указывает, что каждый экземпляр объявляющей или исходной модели имеет ноль или более экземпляров целевой модели. Например, в приложении с клиентами и заказами у клиента может быть много заказов

Итак, в случае, когда вам нужно иметь отношение FK 1: n, тогда вы будете использовать это. Но это будет использоваться, когда FK находится на «одной» стороне. Это означает, что таблица customer (one) будет содержать столбец orders (many) в виде массива FK с таблицей Order.

Как мы можем видеть из документации здесь,

Отношение belongsTo обозначает соединение модели «многие к одному» с другой моделью посредством ссылочной целостности. Ссылочная целостность обеспечивается ограничением внешнего ключа для исходной модели, которая обычно ссылается на первичный ключ в целевой модели. Это отношение указывает, что каждый экземпляр объявляющей или исходной модели принадлежит ровно одному экземпляру целевой модели. Например, в приложении с клиентами и заказами заказ всегда принадлежит только одному клиенту

Итак, в случае, когда вам нужно иметь отношение FK 1: n, тогда вы будете использовать это. Но это будет использоваться, когда FK находится на стороне «многих». Это означает, что таблица Order (many) будет содержать столбец customer (one) в виде FK с таблицей Customer. Здесь нет необходимости в массиве.

Однако большую часть времени вы будете использовать отношения Belongsto для таких случаев. Это работает почти во всех сценариях. Я еще не сталкивался с каким-либо конкретным случаем использования hasMany.