2012-08-01 4 views
1

У меня есть два объекта. Первый называется «Статус»:Symfony 2 & Doctrine 2: Сложное отношение beetwen entity

<?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. Как получить список учетных записей со всеми их последними статусами?

Извините за мой плохой английский.

EDIT: Я хочу только, чтобы получить счет, присоединиться к его последние статусы, а затем получить их просто: задача $ -> GetStatus («выделены»), чтобы получить значение последнего (младшего) статус типа «выделены»

EDIT2: идеал будет по-прежнему иметь возможность сортировать и фильтровать по статусу данного типа

+0

Вы можете добавить отношение lastStatus к каждой учетной записи – WizardZ

+0

, каждая учетная запись может иметь более одного статуса, например. «заблокирован», «истек» и т. д. Лучшим примером для этого будет задача - «закрыто», «выделено». – Krystian

ответ

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

Это более или менее стандартный подход, когда вам нужно первый/последний элемент из пособ и получение всей коллекции может быть накладными расходами.

+0

Это не то, что мне нужно. Я хочу просто получить учетную запись, присоединиться к ее последним статусам, а затем получить их просто: $ task -> getStatus ('highlight') , чтобы получить значение последнего статуса типа «выделено». – Krystian

Смежные вопросы