1

Тема: Хто і як працює із звязаними обєктами.

Всім привіт. Вирішив зробити невелике опитування.
Дуже часто приходиться працювати у веб проектах із звязаними обєктами. Для прикладу у нас є пост у пості є багато тегів. Також у поста є звязаний користувач.
У багатьох фреймворках для цього використовуються relations (has_one, has_many, etc) це дозволяє скоротити кількість написання коду.

Отже у мене  є до вас запитання. На вашу думку як найкраще  реалізувати доступ і модифікацію звязкових моделей (зовнішнє АРІ). Я покищо бачу 2 варіанти.

Варіант 1

$postModel>getTags(); // Отримати список звязаних тегів з даним постом

$postModel>addTags($tagsModels); // Звязати теги з постом
$postModel>removeTags($tagsModels); // Видалити певні теги (відвязати від поста, теги фізично залишаються в базі)
$postModel>removeTags(); // Відвязати всі теги від поста

$postModel->setUser($userModel) ; // Даний пост написав певний користувач.

Варіант 2

$postModel->get('tags');

$postModel>addRelative('tags', $tagsModels); 
$postModel>removeRelative('tags',$tagsModels); 
$postModel>removeRelative('tags'); 

$postModel->setRelative('user', $userModel) ; 

У 2х варіантах планується зробити підсказки (у вигляді плагіна до рнршторма). Другий варіант швидшкий ніж перший, але для підказок необхідно буде плагін встановлювати.

Дякую за увагу.

2

Re: Хто і як працює із звязаними обєктами.

Проголосував за другий, Потім можна при потребі в відповідних класах пореалізовувати, щось типу

function getTags()
{
return $this->getRelative('tags');
}

3

Re: Хто і як працює із звязаними обєктами.

або навіть так

public function __get($name) {
if(in_array($name, $relations)) return $this->getRelative($name);
else return parrent::__get($name);
}

4

Re: Хто і як працює із звязаними обєктами.

Звичайно, що краще другий спосіб, оскільки він більш універсальніший.
Якщо дотримуватись першого способу, то прийдеться під кожну властивість об'єкта писати свій метод...

5

Re: Хто і як працює із звязаними обєктами.

Звичайно, що краще другий спосіб, оскільки він більш універсальніший.
Якщо дотримуватись першого способу, то прийдеться під кожну властивість об'єкта писати свій метод...

для першого способу не потрібно буде кожен раз реалізовувати виборку. Ловимо все чере __call і все працює =)

6

Re: Хто і як працює із звязаними обєктами.

2Вовік

    public function __get($name) {
    if(in_array($name, $relations)) return $this->getRelative($name);
    else return parrent::__get($name);
    }

Таке саме може бути і з першим способом

 public function __get($name) {
    if (in_array($name, $relations)) {
     $methodName = 'get'.$name;
     return $this->$methodName();
   }  else {
     return parrent::__get($name);
   }
}

7

Re: Хто і як працює із звязаними обєктами.

Я вів до того, що 2-й в перший перетворюється однією фунцією. Тому реалізувавши 2-й, автоматично отримаєте 1-й.
Навпаки трохи тяжче буде.

8

Re: Хто і як працює із звязаними обєктами.

Зрозуміло ) дякую )