0

私は開発の選択に直面しています。
PHPでブックシステムを開発しています。本にはタイトルと所有者がいます。

私のデータベースには、キーuser_iduser_nameを持つテーブルtblUserと、キーbook_idbook_title、およびuser_id (外部キー) を持つテーブルtblBookがあります。

UserModel と BookModel という 2 つのテーブル抽象化があります。

モデル/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;
}
?>

models/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 結合クエリを使用し、 BookModelクラスの属性として$user_nameを追加することも考えました。多分これは好ましいですか?私は、クリーンなコードを作成し、MVC 開発のコーディング標準を尊重するための最良の選択をしようとしています。

4

0 に答える 0