如何访问Doctrine简单查询“findall”结果

时间:2014-06-29 02:09:28

标签: php doctrine-orm mariadb

这是我的第一个" findall"简单查询。目的是随机选择1条记录,然后回显"参考" (BibleAnagrams表中的一个字段)。我使用PHP的array_rand进行随机选择。我需要帮助的是如何访问' reference'从生成的arrany_rand()数组。

$Bible_anagram_reference = NULL;

/**
* @var \AMDatabase\Entity\TheVerse\BibleAnagrams $result
*/
$result = $this->getDoctrineEntityManager()
    ->getRepository(get_class($this->getEntityBibleAnagrams()))
    ->findAll();

if (is_array($result) && count($result) > 0) {
    /**
    * @var \AMDatabase\Entity\TheVerse\BibleAnagrams $value
    */
    $value = array_rand($result, 1);
    echo "Bible Ananagram: " . $result[$value]['reference'] . "\r\n";

    exit;
}

随机选择的记录给出结果:

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

当我使用

echo "Bible Ananagram: " . $result[$value]['reference'] . "\r\n";

我收到错误

PHP Fatal error:  Cannot use object of type AMDatabase\Entity\TheVerse\BibleAnagrams as array

当我使用

echo "Bible Ananagram: " . $result[$value]->reference . "\r\n";

我收到错误

PHP Fatal error:  Cannot access private property

如果有更多细节需要帮助我,请告知这些是什么。非常感谢,Ron

1 个答案:

答案 0 :(得分:1)

findAll()函数返回的结果是一个Doctrine Entities数组。要访问结果中的值,您需要使用getter方法。循环结果并打印如下值:

$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;
}