簡體   English   中英

在數組上調用成員函數getNbr()

[英]Call to a member function getNbr() on array

我想選擇數據庫中所有僅具有ROLE_USER角色的用戶,但是當我調用該函數時,他們說“對null調用成員函數getNbr()調用”,我得到了這個問題。我認為bcoz我使用Findby(),bcoz我在另一個調用中使用相同的函數,可以很好地查看代碼:


public function indexAction(Request $request)
    {

     $us = $this->getDoctrine()->getManager();
     $locationus = $us->getRepository('AppBundle:Usr')->findBy(
     [ 'roles' => ["ROLE_USER"] ]);
     echo $nb_us = $locationus->getNbr();

      if($authChecker->isGranted(['ROLE_ADMIN']))
      {
        return $this->render('settingAdmin/profiladmin.html.twig' , array(
          'nb_us' => $nb_us,
      ));
      }

這是UserRepository中的另一個函數:

class UserRepository extends \Doctrine\ORM\EntityRepository
{
  public function getNbr() {

        return $this->createQueryBuilder('l')

                        ->select('COUNT(l)')

                        ->getQuery()

                        ->getSingleScalarResult();

    }
}


getNbrUserRepository類的方法,因此只能對此UserRepository類實例進行調用。 此方法返回用戶總數。

findBy返回實體數組(對於所有具有角色ROLE_USER用戶),而不是UserRepository類實例,因此不能在此變量的上下文中使用getNbr

如果要獲取實體數組的長度(對於所有具有角色ROLE_USER用戶),只需使用count函數:

echo $nb_us = count($locationus);

if($authChecker->isGranted(['ROLE_ADMIN']))
      {
        return $this->render('settingAdmin/profiladmin.html.twig' , array(
          'nb_us' => $nb_us, 'locationus' => $locationus
      ));
      }

那里的代碼中似乎發生了很多事情:

1) $us->getRepository('AppBundle:Usr')可能已經打錯了,應該是$us->getRepository('AppBundle:User')而不是(?)通常,使用$us->getRepository(AppBundle\\User::class)這樣可以更容易/更早地發現語法錯誤。

2)您試圖使用$locationus->getNbr()在數組上調用存儲庫方法,這在多個帳戶上是不正確的(您不能在數組上調用函數,並且存儲庫方法也不能從實體調用)。

3)為什么代碼使用echo?

4)作為補充說明(假設這大致是完整的預期代碼),將所有吸氣劑和處理移入if部分內部是有意義的,這樣代碼將表現更好(它不會執行不必​​要的數據庫查詢等)當用戶沒有足夠的權限訪問視圖/信息時)。

如果我正確理解了意圖,那么在這種情況下,第二個存儲庫函數getNbr在這里是多余的。 如果打算僅計算第一個查找返回的實例數:

 $locationus = $us->getRepository('AppBundle:User')->findBy(['roles' => ["ROLE_USER"] ]);
 $nb_us = count($locationus);

或者,或者(如果您想使用和修復 getNbr存儲庫功能)則不需要第一個存儲庫getter。 但是,這也將需要重寫存儲庫功能:

 $nb_us = $us->getRepository('AppBundle:User')->getNbr("ROLE_USER");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM