zcasper
@zcasper
свободный человек

Еще раз о ActiveRecord vs. DataMapper, есть ли связи в DM?

Возможно ли делать связи не применяя костылей в DM, как это реализовано в AR ?

Пример одной из вариаций для AR:

public function relations()
{
    return [
         'profile' => [static::HAS_ONE, 'Profile', ['user_id'=>'id']],
         'posts' => [static::HAS_MANY, 'Posts', ['user_id'=>'user_id']]
    ];
}


и далее по коду:
$user->profile->name;
$user->profile->family;

foreach ($user->posts as $post) {
    $post->name;
    $post->text;
}
  • Вопрос задан
  • 547 просмотров
Пригласить эксперта
Ответы на вопрос 2
index0h
@index0h
PHP, Golang. https://github.com/index0h
Комментировать
trevoga_su
@trevoga_su
это не костыли, а один из подходов. ничего нового пока не придумали.

я так обошел проблему связей.

Контроллер получает данные из маппера и кидает из во view:
https://github.com/Vasiliy-Makogon/ADV/blob/master...

view:
https://github.com/Vasiliy-Makogon/ADV/blob/master...

Обрати внимание на $row в каждой итерации foreach. Это массив, содержащий объекты моделей. Именно объекты моделей, а не просто объекты.

Вот как возвращается многомерный массив объектов:
https://github.com/Vasiliy-Makogon/ADV/blob/master...

-----
Т.е: у нас как бы полноценные объекты и DataMapper, но связей нет. Мы пишем какой угодно SQL и результатом будет массивы объектов моделей предметной области.

Я искренне считаю идеи создать то, что реально работало бы, в стиле $user->city->name - очень нетривиальной задачей. И неоправданно затратной.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы