Как обрабатывать клиентов с несколькими адресами в CakePHP - PullRequest
0 голосов
/ 12 мая 2010

Я собираю систему для отслеживания заказов клиентов. Каждый заказ будет иметь три адреса; Основной контактный адрес, платежный адрес и адрес доставки. Я не хочу, чтобы в моей таблице заказов были столбцы для трех адресов, я хотел бы сослаться на них из отдельной таблицы и иметь какой-то способ перечислить запись, чтобы я мог определить, является ли адресация основной, отгрузкой или выставлением счета. Имеет ли смысл создавать столбец в таблице адресов для AddressType и перечислять его или создавать другую таблицу - AddressTypes - которая определяет перечисление адресов и ссылку на эту таблицу?

Я нашел другие вопросы, которые касаются этой темы, и именно здесь я взял свою модель. Проблема, которую я имею, состоит в том, чтобы принять это в конвенцию cakePHP. Я изо всех сил пытался усвоить направление, в котором формируются отношения. То, как состояния документации ощущаются для меня задом наперед.

Любая помощь будет оценена,

Спасибо!

Ответы [ 3 ]

1 голос
/ 12 мая 2010

Я предпочитаю думать о hasOne, hasMany и hasAndBelongsToMany как о трех реальных типах отношений.

Отношение ownTo заключается просто в том, чтобы сделать обратное тому, что делают первые два (hasOne / Many).

Если вы посмотрите на эту диаграмму , вы заметите спаривание hasOne / ownTo и hasMany / ownTo.

Кроме того, обратите внимание, что модель, которая "принадлежит", является моделью, хранящей внешний ключ (например, address_type_id).

Таким образом, в вашем случае, поскольку AddressType имеет много адресов (т. Е. У вас может быть много домашних адресов), тогда Address принадлежит AddressType (т. Е. Каждому адресу требуется address_type_id).

1 голос
/ 12 мая 2010

Вы на месте. Вы можете сделать либо, в зависимости от того, насколько вы хотите нормализовать вашу базу данных. Лично для меня я бы выбрал модель AddressType, которая дает вам возможность добавлять и удалять типы адресов по своему усмотрению.

Если вы хотите, чтобы это было проще, тогда я бы просто использовал поле ENUM() в вашей модели адреса.

0 голосов
/ 13 мая 2010

Table1: address_types (идентификатор, имя, активный)

Table2: клиенты (id, имя, активный и т.город, улица и т. д.)

Таким образом, клиенты могут иметь столько адресов, сколько вы хотите.Если вам нужно добавить новый тип адреса, вы не должны изменять таблицу клиентов или адресов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...