Symfony 2 & Doctrine 2: 複雜關係 beetwen 實體



我有两个实体。首次被称为"状态":

<?php
class Status {
    protected $id;
    protected $type = null; // standarized type of status (f.e. "locked", "disabled")
    protected $value = true; // true or false (value of status)
    protected $change_reason = null;
    protected $changed_by;
    protected $changed_at;
}

为了更好的可读性,我已经清除了注释。

第二个叫账户。因为账户并不是唯一一个使用状态的实体,所以状态和任何其他"可状态"实体(我认为)的关系应该是多对多的。对于账户,将有联接表Account_status等

另外,一个状态只属于一个实体。

在这种配置下一切都可以工作,但我真的不知道如何检索具有最新状态的帐户列表。

我写了一个SQL查询来检索实际状态:

SELECT * FROM (
    SELECT t.type, t.value
    FROM status AS t
    ORDER BY t.changed_at DESC
) AS t1 GROUP BY t1.type

我的问题是:

  1. 这个想法正确吗
  2. 如何检索具有所有最新状态的帐户列表

抱歉我英语不好。

编辑:我只想获得一个帐户,加入它的最新状态,然后简单地通过:$task->getStatus('highlighted')获得它们,以获得类型为"高亮显示"的的最新(最年轻)状态的值

编辑2:理想的情况是仍然能够根据给定类型的状态进行排序和筛选

class Task {
    // this is list of all statuses
    protected $statusHistory;
    protected $lastStatus;
    public function __construct() {
        $this->statusHistory = new Arraycollection();
    }
    public function addStatus($status) {
        $this->statusHistory[] = $status;
        $this->lastStatus = $status;
    }
    public function getStatusHistory() {
        return $this->statusHistory;
    }
    public function getLastStatus() {
        return $this->lastStatus;
    }
}
// to get list of statuses
$task->getStatusHistory();
// to get last status, it returns Status object, not collection
$task->getLastStatus();

当您需要集合中的第一个/最后一个元素时,这或多或少是一种标准方法,而获取整个集合可能会带来开销。

相关内容

  • 没有找到相关文章

最新更新