Допустим, у меня есть таблицы автора и статьи.Одна статья может иметь много авторов.Так что это отношения один ко многим.Я создал класс статьи и класс автора.
class author
{
private $id;
private $name;
public function __construct($array)
{
foreach($array...
}
// getters...
// setters...
}
class article
{
private $id;
private $title;
private $content;
private $author = array();
public function __construct($array)
{
foreach($array...
}
// getters...
// setters...
public function setAuthor(author $author)
{
$this->author[] = $author;
}
}
Обратите внимание на setAuthor, внедрение зависимости сеттера.Ему нужен объект автора, чтобы сохранить связь один ко многим (одна статья, много авторов).
Я извлекаю одну статью с ее авторами из базы данных.
$sql = $db->prepare("SELECT article.id AS id_article, title, content,
GROUP_CONCAT(author.id SEPARATOR ';') AS id_author,
GROUP_CONCAT(name SEPARATOR ';') AS name FROM article ar
INNER JOIN author au ON ar.id=au.article_id
WHERE article.id=:id GROUP BY article.id");
$sql->bindValue(':id', $id, PDO::PARAM_INT);
sql->execute();
$fromDb = $sql->fetch();
Теперь мне нужностроить объекты, верно?
$article['id'] = $fromDb['id_article'];
$article['title'] = $fromDb['title'];
$article['content'] = $fromDb['content'];
$id_author = explode(';', $fromDb['id_author']);
$name = explode(';', $fromDb['name']);
$newArticle = new article($article);
foreach($id_author as $key => $value)
{
$author['id'] = $value;
$author['name'] = $name[$key];
$newArticle->setAuthor(new author($author));
}
Я нахожу последнюю часть довольно тяжелой и непрактичной.Я не уверен, что это правильный способ сделать это.Та же проблема возникает со многими отношениями.
Как использовать объекты, когда вы получаете данные из БД в данном конкретном случае?