Как получить доступ к результатам Doctrine simple query «findall»

#php #doctrine-orm #mariadb

#php #doctrine-orm #mariadb

Вопрос:

Это мой первый простой запрос «findall». Цель состоит в том, чтобы случайным образом выбрать 1 запись, а затем повторить значение «ссылка» (поле в таблице BibleAnagrams). Я использую PHP array_rand для случайного выбора. Мне нужна помощь в том, как получить доступ к значению ‘reference’ из результирующего массива arrany_rand().

 $Bible_anagram_reference = NULL;

/**
* @var AMDatabaseEntityTheVerseBibleAnagrams $result
*/
$result = $this->getDoctrineEntityManager()
    ->getRepository(get_class($this->getEntityBibleAnagrams()))
    ->findAll();

if (is_array($result) amp;amp; count($result) > 0) {
    /**
    * @var AMDatabaseEntityTheVerseBibleAnagrams $value
    */
    $value = array_rand($result, 1);
    echo "Bible Ananagram: " . $result[$value]['reference'] . "rn";

    exit;
}
  

Случайно выбранная запись дает результат:

 $result = Array
    (
    [0] => AMDatabaseEntityTheVerseBibleAnagrams Object
        (
        [reference:AMDatabaseEntityTheVerseBibleAnagrams:private] => 1
        [languageIso:AMDatabaseEntityTheVerseBibleAnagrams:private] => en
        [bibleAnagramWord:AMDatabaseEntityTheVerseBibleAnagrams:private] => Love
        [word1:AMDatabaseEntityTheVerseBibleAnagrams:private] => Like
        [word2:AMDatabaseEntityTheVerseBibleAnagrams:private] => Openness
        [word3:AMDatabaseEntityTheVerseBibleAnagrams:private] => Venerate
        [word4:AMDatabaseEntityTheVerseBibleAnagrams:private] => Enjoyment
    )
);
  

Когда я использую

 echo "Bible Ananagram: " . $result[$value]['reference'] . "rn";
  

Я получаю сообщение об ошибке

 PHP Fatal error:  Cannot use object of type AMDatabaseEntityTheVerseBibleAnagrams as array
  

Когда я использую

 echo "Bible Ananagram: " . $result[$value]->reference . "rn";
  

Я получаю сообщение об ошибке

 PHP Fatal error:  Cannot access private property
  

Если вам нужно больше деталей, чтобы помочь мне, пожалуйста, посоветуйте, что это такое. Большое спасибо, Рон

Ответ №1:

Результаты, возвращаемые findAll() функцией, представляют собой массив объектов Doctrine. Для доступа к значениям в результатах вам необходимо использовать методы получения. Перебирайте результаты и выводите значения следующим образом:

 $results = $this->getDoctrineEntityManager()
    ->getRepository(get_class($this->getEntityBibleAnagrams()))
    ->findAll();

foreach ($results as $result) {
    echo $result->getLike()."<br />";
    echo $result->getOpenness()."<br />";
    echo $result->getVenerate()."<br />";
    echo $result->getEnjoyment()."<br />";
}
  

Чтобы это сработало, убедитесь, что у вас есть getLike() , getOpenness() , getVenerate() , getEnjoyment() или любые другие методы, определенные в вашей сущности, которые возвращают требуемые параметры. Пример определения getOpenness() функции:

 public function getOpenness()
{
    return $this->Openness;
}