从PHP中的表抽象中检索关联元素的最佳方法?

时间:2018-02-22 14:40:48

标签: php singleton database-abstraction

我正面临着发展选择 我正在用PHP开发一个书籍系统。一本书有一个标题和一个所有者。

在我的数据库中,我有一个表 tblUser ,其中包含以下键: user_id user_name 以及表 tblBook 使用键 book_id book_title user_id (这是一个外键)。

我有两个表抽象:UserModel和BookModel。

模型/ user.php的

<?php
class UserModel {
public $user_id;
public $user_name;
private $_table = 'tblUser';
public function getUser($user_id) {
   $database = Database::getInstance();
   $sql = "SELECT user_id, user_name FROM {$this->_table} WHERE user_id=:user_id";
   $stmt = $database->getConnection()->prepare($sql);
   $stmt->bindParam(':user_id', $user_id, PDO::PARAM_INT);
   $stmt->execute();
   $data = $stmt->fetch();
   return $data;
}
?>

模型/ book.php中

<?php
class BookModel {
public $book_id;
public $book_title;
public $user_id;
private $_table = 'tblBook';
public function getBook($book_id) {
   $database = Database::getInstance();
   $sql = "SELECT book_id, book_title, user_id FROM {$this->_table} WHERE book_id=:book_id";
   $stmt = $database->getConnection()->prepare($sql);
   $stmt->bindParam(':book_id', $book_id, PDO::PARAM_INT);
   $stmt->execute();
   $data = $stmt->fetch();
   return $data;
}
public function getOwnername1() {
   $database = Database::getInstance();
   $sql = "SELECT user_name FROM tblUser WHERE user_id=:user_id";
   $stmt = $database->getConnection()->prepare($sql);
   $stmt->bindParam(':user_id', $this->user_id, PDO::PARAM_INT);
   $stmt->execute();
   $data = $stmt->fetch();
   return $data['user_name'];
}
public function getOwnername2() {
   $user = new UserModel();
   $user->getUser($this->user_id);
   return $user->user_name;
}
public function getBooks() {
   ...
}
?>

实际上,从ViewBook的视图来看,我想列出我的书和他们的主人。

<?php
$bookmodel = new BookModel();
$books = $bookmodel->getBooks();
?>
<table>
<thead>
<tr>
<th>Title</th><th>Owner name</th>
</tr>
</thead>
<tbody>
<?php foreach ($books as $book): ?>
<tr>
<td><?php echo $book->book_title; ?></td><td><?php echo $book->getOwnername1(); ?></td>
</tr>
<?php endif; ?>
</tbody>
</table>

我的问题是什么是检索所有者名称的最佳开发选择。在我的示例中,我使用了一个方法 getOwnername1()。我还创建了一个方法 getOwnername2(),它从另一个模型调用一个方法。这样做是否干净(在MVC开发中)?所以,如果它是干净的,可能最好使用 getOwnername2()? 我还想在 BookModel :: getBook($ book_id)中使用SQL连接查询,并将 $ user_name 添加为 BookModel 类的属性。也许这更可取? 我试图做出最好的选择,以获得干净的代码并尊重MVC发布中的编码标准。

0 个答案:

没有答案