1

私は2つのエンティティを持っています。最初に「ステータス」と呼ばれる:

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

読みやすくするために注釈をクリアしました。

そして2番目はegと呼ばれます。アカウント。ステータスを使用するエンティティはアカウントだけではないため、ステータスと他の「ステータス可能な」エンティティ (私が思うに) との関係は多対多でなければなりません。アカウントの場合、結合テーブル account_status などがあります。

さらに、1 つのステータスは 1 つのエンティティにのみ属します。

その構成ではすべて機能しますが、最新のステータスでアカウントのリストを取得する方法が本当にわかりません。

実際のステータスを取得する 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') タイプ「ハイライト」の最新 (最も若い) ステータスの値を取得する

EDIT2 : 理想的には、特定のタイプのステータスでソートおよびフィルタリングする機能がまだあります

4

1 に答える 1

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

コレクションから最初/最後の要素が必要で、コレクション全体を取得するのがオーバーヘッドになる可能性がある場合は、多かれ少なかれ標準的なアプローチです。

于 2012-08-01T19:48:56.913 に答える