2013-11-22 104 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

顺便说一句,因为我有两件事存储 - 优惠券和用户 - 我将如何指定两者的位置? –