Как правильно сохранить реляционную модель с помощью datamapper

В настоящее время я пытаюсь войти в (Domain) Models, Datamappers и так далее в PHP.
И в настоящее время у меня возникают некоторые проблемы с пониманием того, как правильно сохранять модели, которые также имеют модели в своем наборе атрибутов.

Например, классический пример user => address.
В базе данных я бы имел отношение 1: 1 между этими двумя.

Теперь, если я создал DataMapper, который возвращает мне заполненную модель с набором адресов. Как я смогу изменить этот адрес и сохранить его?

Учитывая тот факт, что user_table имеет поле «address_id»

Вот как я бы сейчас это сделал:

// user model
class Model_User {
/*
* Other getter /setters
*/
...

function setAddress(Model_Address $address) {
$this->_address = $address
}

}

// usermapper
class Mapper_User {

function save(Model_User $user) {
$data = array(
'id'         => $user->getId(),
'address_id' => $user->getAddress()->getId()
);
....
}
}

Но что произойдет, если, например, у пользователя по нескольким причинам несколько адресов? Таким образом, это становится отношением 1: n.

Каждый адрес будет иметь атрибут «user_id», который связывает его с пользователем.

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

// address model
class Model_Address {
/*
* Other getter /setters
*/
...

function setUserId($user_id) {
$this->_user_id = $user_id
}

}

// address mapper
class Mapper_Address {

public function save(Model_Address $address) {

$data = array(
'id'         => $address->getId(),
'user_id'    => $address->getUserId()
);
....
}

}// user model
class Model_User {
/*
* Other getter /setters
*/
...

protected $_addresses;

function addAddress(Model_Address $address) {
$this->_addresses[] = $address;
}

}

Но как бы вы сохранили такую ​​модель пользователя?
Сохранить AddressModel перед добавлением его пользователю с правильным user_id?

Позвольте UserMapper создать AddressMapper в функции UserMapper-> save () и сохранить модель адреса? <- Этот кажется мне неправильным.

Надеюсь, что кто-нибудь может мне помочь, так как это беспокоит меня уже некоторое время

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]