2

symfony 4 から、サンプル リポジトリ クラスを作成します。このクラスから、すべてのメールのユーザーのリストを取得するメソッドを作成しました。次のような配列構造を取得したいと思います。

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()」の出力をダンプしたときの結果:

ここに画像の説明を入力

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」を使用して多次元配列を取得し、最初の次元ですべての電子メールを取得します (電子メールが重要です)。私は自分の目標に近づいていますが、完璧ではありません。私は「軽量」な方法を探しています(私の英語で申し訳ありません-_-)、できるだけ単純なクエリを実行したいので、メールのみを取得したいと思います(メール+別の役に立たないユーザー情報ではありません)。出来ますか ?

4

3 に答える 3

1

遅れるかもしれませんが、追ってお知らせしますが、正しい答えはここに記載されていると思います。

次のようgetScalarResult()に使用できます。array_column

$emailArray = array_column($getScalarResult(), "email");
于 2018-11-27T09:44:56.283 に答える
0

getResult を呼び出したら、ハイドレーション メソッドを修正して、Doctrine にオブジェクトを返すように指示しました。 詳細については、このページを参照してください。

私の意見では、リレーショナル データストアから結果セットをフェッチした後、同じ結果を複数回フェッチして異なる形式のデータを取得する可能性があるというのは奇妙で予測不可能な考えです。

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

于 2017-12-31T19:15:12.147 に答える