am扩展了我的论坛应用程序,以允许用户自己pm,我想出了这个表,它是一个实体类。
<?php
class Message{
public $id;
public $sender;
public $receiver;
public $content;
public $sentDate;
public $readDate;
public $status;
private $user;
private $usersTable;
public function __construct(DatabaseTable $usersTable){
$this->usersTable = $usersTable;
}
public function getSender(){
if(empty($user)){
$this->user = $this->usersTable->findById($this->sender);
}
return $this->user;
}
public function getReceiver(){
if(empty($user)){
$this->user = $this->usersTable->findById($this->receiver);
}
return $this->user;
}
}
然后在控制器中,我创建了此方法(PHP称之为函数)。在Message控制器内部,我将此函数命名为
列表
public function list(){
$user = $this->authentication->getUser();
$page = $_GET['page'] ?? 1;
$offset = ($page-1)*10;
$messages = $this->messagesTable->find('receiver', $user->id, 'sentDate DESC', 10, $offset);
$title = 'Inbox messages';
return [
'template' => 'listmessages.html.php',
'title' => $title,
'variables' => [
'messages' => $messages,
'user' => $user
]
];
}
现在,能够检索的仅是接收到的消息,不包括已发送的消息。那我该怎么做才能使它既检索发送的消息又检索消息,因为我只能查询框架中的一列。这是
查找功能
位于Database类中。
public function find($column, $value, $orderBy = null, $limit = null, $offset = null) {
$query = 'SELECT * FROM ' . $this->table . ' WHERE ' . $column . ' = :value';
$parameters = [
'value' => $value
];
if ($orderBy != null) {
$query .= ' ORDER BY ' . $orderBy;
}
if ($limit != null) {
$query .= ' LIMIT ' . $limit;
}
if ($offset != null) {
$query .= ' OFFSET ' . $offset;
}
$query = $this->query($query, $parameters);
return $query->fetchAll(\PDO::FETCH_CLASS, $this->className, $this->constructorArgs);
}