Класс обертки Mysqli by Koenig (Допилить)

9.18K
.
Koenig, ты хочешь загружать помимо основного объекта все субобъекты, на которые он ссылается через foreign key?
.
(\/)____o_O____(\/)
Delphinum, типо того, чтоб избавится от лишних строк кода, то есть сеттер будет примерно таким
public function setKey($id) {
$this->key = new SubClass($id);
}
.
Koenig, обычно связи грузятся "лениво" (lazy load) по требованию. Тобишь грузится они не должны, если программист прямо об этом не запросит. Я встречал два решения этой задачи:
1. На базе Mapper'а - в этом случае связи загружаются через Mapper
2. На базе самой сущности - в этом случае связи загружаются при первом вызове getter'а
.
(\/)____o_O____(\/)
Delphinum, а пример можно? я просто кодом понимаю быстрее
все маны начинаю с кода читать, потом схемы и текст
.
(\/)____o_O____(\/)
надо написать свой фетч объекта. думаю второй вариант подойдёт
не просто записывать свойства, а пользовать сеттеры
.
Koenig, Ну представь две таблицы:
{
users: ['id', 'login'],
messages: ['id', 'message', 'author']
}


Для них есть две сущности:
class User{
  public $id;
  public $login;
}

class Message{
  public $id;
  public $messag;
  public $author;
}

У Message есть связь с User через свойство author, в котором записывается идентификатор юзера, написавшего это сообщение.

Получить эту связь можно двумя способами.

1. Через Mapper:
class MessageMapper extends Mapper{
  public function getAuthor(Message $message){
    $userId = $message->author;
    $userMapper = new UserMapper;
    return $userMapper->fetch($userId);
  }
}

$mapper = new MessageMapper;
$message = $mapper->fetch(1); // Получаем сообщение с id = 1
$author = $mapper->getAuthor($message); // Получаем автора этого сообщения

Ествественно метод getAuthor можно вынести в UserMapper и т.д., идею это не меняет.

2. Через Entity:
class Message{
  ...

  public function getAuthor(){
    $userId = $message->author;
    $userMapper = new UserMapper;
    return $userMapper->fetch($userId);
  }
}

$mapper = new MessageMapper;
$message = $mapper->fetch(1); // Получаем сообщение с id = 1
$author = $message->getAuthor(); // Получаем автора этого сообщения
.
(\/)____o_O____(\/)
второй вариант я вижу так
if (!is_object($this->key) {
$this->key = new SubClass;
}
return $this->key;
.
(\/)____o_O____(\/)
Delphinum, больше букв писать как по мне через маппер
.
Koenig, зато проще в реализации, да и можно из одного реализовать второе. Сам я предпочел первый вариант, так как он выделяет из сущности логику восстановления, которая в ней быть (я считаю) не должна, но это спорный вопрос и каждому нравится свое.
.
(\/)____o_O____(\/)
кину сюда http://medoo.in/doc
Всего: 362