[英]how to handle inner join and one to many relation with OOP?
假设我有一个作者表和文章表。 一篇文章可以有很多作者。 所以这是一对多的关系。 我创建了一个文章类和一个作者类。
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,一个 setter 依赖注入。 它需要一个作者对象来保持一对多的关系(一篇文章,多个作者)。
我从数据库中检索了一篇文章及其作者。
$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));
}
我觉得最后一部分很重而且不实用。 我不确定这是正确的方法。 多对多关系也会出现同样的问题。
在这种特殊情况下,一旦从 db 获取数据,如何使用对象?
您可以使用PDO 。
一个例子:
<?php
$db = new PDO('mysql:host=localhost;dbname=test', 'root', '');
try {
$results = $db->query(
"SELECT *
FROM articles ar
INNER JOIN authors au ON ar.id=au.article_id"
);
} catch (Exception $e) {
echo "bad query";
echo $e;
}
$items = $results->fetch(PDO::FETCH_ASSOC);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.