TYPO3,Extbase:设置mm_relation

时间:2014-05-08 15:15:40

标签: typo3 extbase

我只是尝试使用extbase,并使用两个表(repostiories)和一个mm_table存储关系来解决问题。

表格是:

  • 地址能
  • 类别表
  • address_category mm table< - 如何在此添加条目?

我创建了一个Address类型的对象,并且可以setName等没有问题。但是还有一个cateogry表,这两个表由mm_table相关联。而这种关系我只能在TYPO3后端而不是在插件中。

代码是这样的:

// get repo
$addressRepo = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\GoMapsExt\Domain\Repository\AddressRepository');
$addressCategoryRepo = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\GoMapsExt\Domain\Repository\CategoryRepository');

// get category object (lead = 2))
$addressCategoryObj = $addressCategoryRepo->findByUid(2);
// attach category to address
//$go_map_address->setCategories($addressCategoryObj);   <-- need to add category here

我如何添加这样的关系?似乎没有setCategory方法。

2 个答案:

答案 0 :(得分:0)

首先,检查模型内的功能。你肯定有像addCategory(),getCategories(),removeCategory()或setCategories()这样的函数。

第二,如果确实需要,不要使用makeInstance函数获取存储库(它已过时),只需注入它或使用ObjectManager:

/**
 * categoryRepository
 *
 * @var \TYPO3\GoMapsExt\Domain\Repository\CategoryRepository
 * @inject
 */
protected $categoryRepository;

或/和

$objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');

if (!is_object($this->categoryRepository)) {
    $this->categoryRepository = $objectManager->get('TYPO3\\GoMapsExt\\Domain\\Repository\\CategoryRepository');
}

因为Typo3可能有问题,所以我通常都会使用它们。

答案 1 :(得分:0)

在extbase中使用mm和其他关系非常简单。首先,您需要配置与TCA的关系,如果它在后端工作,那么您已经完成了这一部分。其次,您需要在模型中配置属性,如下所示:

/**
 * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\GoMapsExt\Domain\Model\Category>
 * @lazy
 */
protected $categories;


/**
 * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $categories
 */
public function setCategories($categories) {
    $this->categories = $categories;
}

/**
 * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage
 */
public function getCategories() {
    // this prevents a fatal error if you have created your model with new instead of the objectManager
    if ($this->categories === null) {
        $this->categories = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
    }
    return $this->categories;
}

在Controller中,您可以添加/删除/遍历类别:

$go_map_address->getCategories->attach($addressCategoryObj);

foreach ($go_map_address->getCategories() as $category) {
    //$category
}

请记住,在向其添加类别后,您必须将$ go_map_address与存储库一起保存,就像对对象的每次其他更改一样