2017-12-31 322 views
0

symfony 4から、サンプルリポジトリクラスを作成します。このクラスから、私はすべての電子メールのユーザーのリストを取得するためのメソッドを作成しました。symfony 4、doctrine、getResult、getArrayResultとgetScalarResultは同じ構造体の結果を返します

array(
    "email1", 
    "email2", 
    "email3", 
    ...  
) 

しかし、 'getResult'を使用すると、多次元配列が得られます。次に、getArrayResultとgetScalarResultを使ってテストしたところ、まったく同じ配列構造の結果が得られました!

以下

、私のサービスクラス:

<?php 
class UserRepository extends ServiceEntityRepository 
{ 
    public function __construct(RegistryInterface $registry) 
    { 
     parent::__construct($registry, User::class); 
    } 

    public function getAllEmail(){ 
     $result = $this->createQueryBuilder('u') 
      ->select(array('u.email')) 
      ->setMaxResults(5) 
      ->getQuery(); 
     return array(// getResult && getArrayResult && getScalarResult return exactly same array structure 
      "getResult" => $result->getResult(), 
      "getArrayResult" => $result->getArrayResult(), 
      "getScalarResult" => $result->getScalarResult(), 
     ); 
    } 
} 

そして、私はの出力ダンプ結果 "getAllEmailを()":

enter image description here

なぜのgetResult/getArrayResult/getScalarResultまったく同じ返しますアレイ構造?私はどこかでミスをしますか?

編集:私は私のリポジトリクラスを変更:

public function getAllEmail(){ 
    $result = $this->createQueryBuilder('u','u.email') 
     ->setMaxResults(5) 
     ->getQuery(); 
    return array(
     "getResult" => $result->getResult(), 
     "getArrayResult" => $result->getArrayResult(), 
     "getScalarResult" => $result->getScalarResult(), 
    ); 
} 

そして、ダンプ出力: 'のgetResult' と 'getArrayResult' で

enter image description here

私は多次元配列を取得し、最初に私はすべての電子メールを取得します(電子メールが鍵です)。私はもっ​​と目標に近づくが、完璧ではない。私は可能な限り単純なクエリを実行したいので、私は '軽量'の方法を(私の英語-_-)申し訳ありません、私は電子メールだけ(電子メール+別の役に立たないユーザー情報)を取得したいと思います。出来ますか ?

答えて

0

getResultを呼び出すと、Doctrineにオブジェクトを返すように指示する水和メソッドが修正されました。 See this page for more discussion of that.

私の意見では、リレーショナルデータストアから結果セットを取得すると、同じ結果を何度もフェッチしてデータのさまざまなフォーマットを取得するという奇妙で予期せぬ考えです。

より良いテストは、結果の形式が異なるたびに同じクエリを複数回実行することです。

+0

おかげで、私は私の方法をmodifiy。私はdiffernt結果を得るが、私は単純な1次元配列を持っていない – user2137454

関連する問題