我面临着一个发展的选择。
我正在用 PHP 开发一个图书系统。一本书有一个标题和一个所有者。
在我的数据库中,我有一个带有键的表tblUser:user_id和user_name以及一个带有键book_id、book_title和user_id的表tblBook(这是一个外键)。
我有两个表抽象: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 开发中的编码标准。