Symfony 2&学说2:复杂的关系beetwen实体

时间:2012-08-01 16:41:07

标签: doctrine-orm many-to-many

我有两个实体。首先称为“状态”:

<?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不是唯一一个使用状态的实体,所以关系beetwen Status和任何其他“可定位”实体(我认为)应该是多对多的。对于Account,会有联接表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. 如何检索包含所有最新状态的帐户列表?
  3. 抱歉我的英语不好。

    修改: 我只想获得一个帐户,加入其最新状态,然后通过以下方式获取它们:$ task - &gt; getStatus('highlight')获取“突出显示”类型的最新(最年轻)状态值

    EDIT2 : 理想的仍然有能力按给定类型的状态进行排序和过滤

1 个答案:

答案 0 :(得分:1)

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

当您需要收集的第一个/最后一个元素时,或多或少的标准方法,并且获取整个集合可能是一个开销。