2016-08-28 17 views
1

Symfony2の中でDQLを持つエンティティからカスタムゲッター値を取得する、しかしには、フィールド「時代」はありません私のUserエンティティクラスが「u.age」と私のユーザーのリストを取得し、それはしかし、JSONにシリアライズ誕生日フィールドは、私はsymfonyの2.8</strong><strong>で<strong>FOSUserBundle</strong>と<strong>FOSRestBunldle</strong>を使用し、年齢とともに短いユーザー一覧を取得する必要がありますよ

public function getAge() 
{ 
    $now = new \DateTime('now'); 
    $age = $this->birthdate->diff($now); 
    return $age->format('%y'); 
} 

から年齢を計算するために、このカスタムゲッターを持っている理由であるユーザーデータベースは、動作しません。実際のフィールドはありません。u.age

$query = $em->createQuery('SELECT u.username, u.age FROM AppBundle:User u'); 
$users = $query->getResult(); 

年齢になるだろう->findAll()でリポジトリを使用するだけでなく、ここでは必要ありませんその他の関連事業体(柱、ユーザーによるコメント)の多くをロードし、過負荷のビットになります。

のユーザー名がで、年齢がのユーザーリストを取得するにはどうすればよいですか?

ありがとうございます!

答えて

2

DBにはageフィールドがありません。これは、Doctrineマッピングでは持っていないことを意味します。したがって、選択することはできません。 Doctrineはそれについて何も知らない。

エンティティインスタンス内で計算するために必要なデータを選択する必要があります。この場合、ユーザーの年齢を計算するために、おそらく誕生日を選択したいと考えています。

例えば:

$query = $em->createQuery('SELECT u.username, u.birthday FROM AppBundle:User u'); 
$users = $query->getResult(); 

次にあなたがPHPコードであなたのエンティティから年齢を得ることができる必要があります。

1

解決策が見つかりました。注釈@VirtualPropertyを使用するとシリアライザは値を取得します。

use JMS\Serializer\Annotation\VirtualProperty; 

をエンティティクラスに含める必要があるため、アノテーションが機能します。

/** 
* @VirtualProperty 
*/ 
public function getAge() 
{ 
関連する問題

 関連する問題