2013-11-22 61 views
0

我想從Tx_Extbase_Domain_Repository_FrontendUserRepository運行一個簡單的查詢。除了findByUid(),我找不到任何工作,甚至沒有findAll()。Tx_Extbase_Domain_Repository_FrontendUserRepository-> findAll()not in typo3 4.5.30?

在我的控制器我有這樣的代碼,這似乎工作:

/** 
* @var Tx_Extbase_Domain_Repository_FrontendUserRepository 
*/ 
protected $userRepository; 

/** 
* Inject the user repository 
* @param Tx_Extbase_Domain_Repository_FrontendUserRepository $userRepository 
* @return void */ 
public function injectFrontendUserRepository(Tx_Extbase_Domain_Repository_FrontendUserRepository $userRepository) { 
$this->userRepository = $userRepository; 
} 

/** 
* action create 
* 
* @param Tx_BpsCoupons_Domain_Model_Coupon $newCoupon 
* @return void 
*/ 
public function createAction(Tx_BpsCoupons_Domain_Model_Coupon $newCoupon) { 
...... some code ..... 
$user = $this->userRepository->findByUid(($GLOBALS['TSFE']->fe_user->user[uid])); 
$newCoupon->setCreator($user); 
...... some code ..... 
} 

但在其他功能我想不是UID而是由fe_users列名爲vipnumber(int列)來查找用戶,以便我試圖

/** 
* check to see if there is already a user with this vip number in the database 
* @param string $vip 
* @return bool 
*/ 
public function isVipValid($vip) { 
echo "<br/>" . __FUNCTION__ . __LINE__ . "<br/>"; 
echo "<br/>".$vip."<br/>"; 

//$ret = $this->userRepository->findByUid(15); //this works!! but 
$query = $this->userRepository->createQuery(); 
$query->matching($query->equals('vip',$vip)); 
$ret = $query->execute(); //no luck 
................. 

而且也沒有這個

$ret = $this->userRepository->findAll(); 

怎麼能一個工作,但不是TH其他人?在我的設置中,我已經把 config.tx_extbase.persistence.classes.Tx_Extbase_Domain_Model_FrontendUser.mapping.recordType> 這似乎是必要的fiondByUid工作,我是不是阻止另一個工作?

我使用TYPO3 v 4.5.30與extbase 1.3

感謝

回答

1

如果$this->userRepository->findByUid(15);作品,有什麼理由$this->userRepository->findAll();不應該。但是,$this->userRepository->findAll();不會返回單個對象,而是返回所有對象的集合,因此您必須遍歷它們。

如果向fe_users添加一列,則必須將其添加到TCA和extbase模型(您還需要一個getter和setter)!之後,您可以在存儲庫中調用findByProperty($property)。你的情況,這將是

$user = $this->userRepository->findByVipnumber($vip); 

這將返回有$ VIP設置爲自己的Vipnumber所有UserObjects。如果您只是想檢查$ vip是否已被使用,您可以致電

$user = $this->userRepository->countByVipnumber($vip); 

改爲。這顯然會返回具有此$ vip的用戶數量;

您從不在儲存庫外部使用$query = $this->createQuery();

要將屬性添加到您創建自己的模型類/域/型號/ FronendUser.php的fronenduser型號:

class Tx_MyExt_Domain_Model_FrontendUser extends Tx_Extbase_Domain_Model_FrontendUser { 
    /** 
    * @var string/integer 
    */ 
    protected $vipnumber; 
} 

添加一個getter和一個setter。現在你創建你自己的FrontendUserRepository並像擴展模型一樣擴展extbase。您在Controller中使用此存儲庫。現在,你幾乎沒有:通過Typo腳本告訴Extbase,你的模型使用fe_users表,一切都應該工作:

config.tx_extbase { 
    persistence{ 
     Tx_MyExt_Domain_Model_FrontendUser{ 
      mapping { 
       tableName = fe_users 
      } 
     } 
    } 
} 

要在一般存儲庫禁用storagePids,您可以使用此代碼你的資料庫裏面:

/** 
* sets query settings repository-wide 
* 
* @return void 
*/ 
public function initializeObject() { 
    $querySettings = $this->objectManager->create('Tx_Extbase_Persistence_Typo3QuerySettings'); 
    $querySettings->setRespectStoragePage(FALSE); 
    $this->setDefaultQuerySettings($querySettings); 
} 

在此之後,您的Querys將適用於所有PID。

+0

嗨丹尼爾,感謝您的答覆。我的擴展程序不會向fe_users添加列,但會使用由另一個擴展添加的列。我如何將它添加到TCA或我的模型?有什麼地方需要添加關於recordtype或storagepid的地方嗎? –

+0

爲什麼不使用$ query = $ this-> userRepository-> createQuery();在自己的倉庫之外?這是一個公開的方法。 –

+0

那麼,如果是由另一部分添加該列,那麼最有可能的TCA是照顧關閉(你可以隨時查詢您的後端。配置 - > TCA-> fe_users->列。您的字段必須apear那裏。至於模型我編輯我的答案 – Daniel

0

我沒有機會與前端用戶的工作,所以我不知道下面在這種情況下適用:自動

在我迷迷糊糊uppon事實的自定義表中,extbase庫看看存儲在每個條目中的pid,並根據設置的存儲pid(可能還有當前的pid,如果沒有設置)檢查它。搜索uid通常意味着你有一個特定的數據集,所以自動檢查其他值可能在邏輯上被忽略,這將支持你的經驗。我試圖設置您的擴展到前端用戶存儲在ts設置的地方存儲PID:

plugin.[replace_with_extkey].persistence.storagePid = [replace_with_pid] 
+0

嗨gsnerf,我試過但沒有運氣,沒有任何改變。 –

+0

順便說一句,因爲我有兩件事存儲 - 優惠券和用戶 - 我將如何指定兩者的位置? –