2

私の Symfony2 プロジェクトでは、Spot と Weather という 2 つのエンティティがあり、2 つのエンティティ間に 1 対多の関係 "weatherReports" があります。

一部の天気予報は古くなっているため、「activeWeatherRecords」メソッドを作成して、スポット エンティティの天気エンティティをフィルター処理したいと考えています。

残念ながら、これを行う方法がわかりません。Spot オブジェクトはお気に入りに登録され、User オブジェクトにリンクされ、小枝テンプレートから直接アクセスされるため、コントローラからオブジェクトを取得することは考えられません。

ここで質問があります: 小枝テンプレートから直接リレーションシップをフィルター処理する最良の方法は何ですか?

更新 09/11/2013

私は自分の関係をフィルタリングする方法で自分の関係をフィルタリングすることができました.

私のスポット エンティティで、getActiveWeatherRecords() メソッドを宣言しました。

public function getActiveWeatherReports()
    {
        // Date
        $date = new \DateTime(date('Y-m-d 12:00:00', time()));

        // Criteria
        $criteria = Criteria::create()
            ->where(Criteria::expr()->gte("date", $date))
            ->orderBy(array("date" => Criteria::ASC))
        ;

        return $this->weatherReports->matching($criteria);
    }

そして、次のように簡単に小枝テンプレートからこのメソッドを呼び出すことができます。

[...]
{% for weatherReport in spot.activeWeatherReports %}
[...]
{% endfor %}
[...]
4

1 に答える 1

1

1 つの方法は、アクティブなレコードのみを取得するファインダー メソッドを作成することです。そのメソッドを Doctrine リポジトリに配置し、コントローラー (またはService Layer ) から呼び出して、テンプレートに渡すことができます。

もう 1 つの方法は、フィルタリング メソッドをエンティティに直接追加することです。この方法では、別のメソッドを呼び出して結果をテンプレートに渡す必要はありません — エンティティに渡すエンティティで十分です。

于 2013-09-11T08:44:03.820 に答える