创建一个系统,用户可以使用PHP和ORM自己私人消息

时间:2018-11-09 14:40:56

标签: php mysql orm

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);
    }

0 个答案:

没有答案