Singleton — лучший способ получить связанный элемент из абстракции таблицы в PHP?

Я стою перед выбором развития.
Я занимаюсь разработкой книжной системы на PHP. Книга имеет название и владельца.

В моей базе данных есть таблица tblUser с ключами: Идентификатор пользователя а также user_name и стол tblBook с ключами book_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>

Nom мой вопрос, что было бы лучшим выбором для разработки, чтобы получить имя владельца. В моем примере я использовал метод getOwnername1 (). Я также создал метод getOwnername2 () который вызывает метод из другой модели. Чисто ли это делать (в разработке MVC)? так что, если он чистый, может быть, предпочтительнее использовать getOwnername2 ()?
Я также подумал использовать SQL-запрос соединения в BookModel :: getBook ($ book_id) и добавить $ user_name как атрибут к BookModel учебный класс. Может быть, это предпочтительнее?
Я пытаюсь сделать лучший выбор, чтобы иметь чистый код и уважать стандарты кодирования в MVC delomentment.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …