Doctrine orm Symfony 2&;学说2:实体之间的复杂关系

Doctrine orm Symfony 2&;学说2:实体之间的复杂关系,doctrine-orm,many-to-many,Doctrine Orm,Many To Many,我有两个实体。首先称为“状态”: 我的问题是: 这个想法完全正确吗 如何检索具有所有最新状态的帐户列表 对不起,我的英语很差 编辑: 我只想获得一个帐户,加入它的最新状态,然后简单地通过:$task->getStatus('highlighted')获得“highlighted”类型的最新(最年轻)状态的值 EDIT2: 理想情况是仍然能够根据给定类型的状态对任务进行排序和筛选{ //这是所有状态的列表 受保护的$statusHistory; 受保护状态; 公共函数构造(){ $this->st

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

我的问题是:

  • 这个想法完全正确吗
  • 如何检索具有所有最新状态的帐户列表
  • 对不起,我的英语很差

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

    EDIT2: 理想情况是仍然能够根据给定类型的状态对任务进行排序和筛选{ //这是所有状态的列表 受保护的$statusHistory; 受保护状态; 公共函数构造(){ $this->statusHistory=newarraycollection(); } 公共函数addStatus($status){ $this->statusHistory[]=$status; $this->lastStatus=$status; } 公共函数getStatusHistory(){ 返回$this->statusHistory; } 公共函数getLastStatus(){ 返回$this->lastStatus; } } //获取状态列表的步骤 $task->getStatusHistory(); //要获取最后一个状态,它将返回状态对象,而不是集合 $task->getLastStatus(); 当您需要集合中的第一个/最后一个元素时,这或多或少是一种标准方法,获取整个集合可能是一项开销。

    类任务{
    //这是所有状态的列表
    受保护的$statusHistory;
    受保护状态;
    公共函数构造(){
    $this->statusHistory=newarraycollection();
    }
    公共函数addStatus($status){
    $this->statusHistory[]=$status;
    $this->lastStatus=$status;
    }
    公共函数getStatusHistory(){
    返回$this->statusHistory;
    }
    公共函数getLastStatus(){
    返回$this->lastStatus;
    }
    }
    //获取状态列表的步骤
    $task->getStatusHistory();
    //要获取最后一个状态,它将返回状态对象,而不是集合
    $task->getLastStatus();
    

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

    您可以为每个帐户添加lastStatus关系每个帐户可以有多个状态,例如“锁定”、“过期”等。。。更好的例子是“已关闭”、“突出显示”任务。您可以为每个帐户添加lastStatus关系每个帐户可以有多个状态,例如“已锁定”、“已过期”等。。。更好的例子是“关闭”、“突出显示”任务,这不是我需要的。我只想获得一个帐户,加入它的最新状态,然后通过:$task->getStatus('highted')获得最新状态的值,类型为“highted”。这不是我需要的。我只想获得一个帐户,加入它的最新状态,然后简单地通过:$task->getStatus('highlighted')获得一个类型为“highlighted”的最新状态值。
    <?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;
    }
    
    SELECT * FROM (
        SELECT t.type, t.value
        FROM status AS t
        ORDER BY t.changed_at DESC
    ) AS t1 GROUP BY t1.type