findByで取得したデータで「Error: Call to a member function on array」がでた時[Symfony]

SymfonyとDoctrineの記事になります。
私の環境の各バージョンは次の通りです。
Symfony 3.4
Doctrine 2.12

後から考えれば当たり前なんですけど、エラーが出た時に見直したのでメモ。findByで取得したentityからデータを取得しようとしたときに、「Error: Call to a member function on array」が発生。

エラーが出た理由

エラーが出るサンプル

// get data where "userId" is testerXX
$userRepository = $entityManager->getRepository('AppBundle:User');
$userEntity = $userRepository->findBy(
    ['userId' => 'testerXX']
);
// Get "name" from the obtained entity
$userEntity->getName();

// Error: Call to a member function on array

上記例はエラーが発生します。その理由は、findByで取得したEntityが配列になっているからです。
なので、そのままEntityとしてデータを取得するには、Entityを1つだけ取得する必要があります。

エラー解消法

取得したいデータが1レコードであるという前提がありますが、配列でなく、Entity一つを取得したらOKです。
つまりfindOneByを使って取得します。

// get data where "userId" is testerXX
$userRepository = $entityManager->getRepository('AppBundle:User');
$userEntity = $userRepository->findOneBy( ['userId' => 'testerXX'] );
// Get "name" from the obtained entity
$userEntity->getName();

わかっている人にはそれはそうだよねという話なのですが、ちょっと引っかかったのでまとめてみました。

Symfonyおすすめ書籍

あまり種類がないのと、そもそもフレームワークとして情報が膨大なので、入門でも結構読み応えがあります。
「PHPフレームワーク Symfony 4入門」


コメントを残す 0

Your email address will not be published.

18 − 10 =