2016-11-19 77 views
0

我写了一个扩展,它随机选取一个带有链接(横幅)的定义数量的图像来显示。数据库中的TYPO3自定义扩展注册展示

我想统计他们显示的次数(印象)。也就是说,在随机函数做出选择之后,我希望将所选条目的数据库字段impressions增加1。

这是域库的相关部分:

public function findPartnerList($entryNumber = 6) { 

    $entries = $this->createQuery()->execute()->count(); 
    $offset = mt_rand(0, max(0, ($entries - $entryNumber))); 

    ... // code refers to a class that picks random 

    $result = $query->execute(); 

    ... // field:impressions should get increased by one for all uid's in $result 

    return $results; 
} 
  • 我不知道如何处理 $query->execute()产生的对象...
  • 我不知道该怎么写入数据库...
  • 我不知道该怎么impressions一个增加现场...

回答

1

基本上,您应该只对控制器中的域对象执行操作,而不是在存储库中执行操作 - ORM层只是OOP域模型世界和数据库之间的连接。

WhateverController例如...

... 
/** @var Whatever[] $items */ 
$items = $this->whateverRepository->findPartnerList(); 
foreach ($items as $item) { 
    $item->setImpressions($item->getImpressions() + 1); 
    $this->whateverRepository->update($item); 
} 
... 
+0

足够接近! 'setImpressions($ item-> getImpressions()+ 1)'必须是'increaseImpressions()',并且下面添加到model/item.php中'public function increaseImpressions(){$ this-> impressions + = 1; }'...你的代码给了一个致命的错误... – webMan

+0

你能否更新你的答案,以便有很好的参考... – webMan

+0

感谢您的反馈。然而,这个例子已经与'Whatever'域对象保持非常通用。当然,这必须根据你的特定扩展名和类名进行调整(我和其他人不应该知道)。这就是为什么我会选择保持示例通用... ...#: –