1

我对 extbase 中具有 1:1 关系的模型有疑问。我的模型“Beast”有一个链接到另一个模型“MissingBeast”,这是通过 1:1 关系实现的。我可以成功地将 MissingBeast 对象添加到 Beast 对象中。但我不知道如何重置它。

下面的代码展示了 Model Beast 中的属性定义

/**
 * missingBeast
 *
 * @var Tx_Hobeast_Domain_Model_MissingBeast
 * @lazy 
 */
 protected $missingBeast;

/**
 * Returns the missingBeast
 *
 * @return Tx_Hobeast_Domain_Model_MissingBeast $missingBeast
 */
public function getMissingBeast() {
    return $this->missingBeast;
}

/**
 * Sets the missingBeast
 *
 * @param Tx_Hobeast_Domain_Model_MissingBeast $missingBeast
 * @return void
 */
public function setMissingBeast(Tx_Hobeast_Domain_Model_MissingBeast $missingBeast) {
    $this->missingBeast = $missingBeast;
}

Model Beast 数据库表中missingBeast 的值就是missingBeast 的id。默认情况下为 0。

我可以在设置 MissingBeast 后将此 id 重置为 0 吗?我试图像这样删除丢失的野兽:

   $missingBeast = $this->service->missingBeastRepository->findByBeast($beast);
   $this->service->missingBeastRepository->remove($missingBeast);

但是当我这样做时,以下查询会陷入无限循环。

$query = $this->createQuery();
return $query->matching($query->equals("uid", $beast->getMissingBeast()))->execute()->count();

我正在使用 Typo 版本 4.7.8

4

1 回答 1

4

只需将其设置为 NULL,这将删除关系并且不要忘记更新存储库中的模型。

$beast = $this->beastRepository->findByUid(345)->setMissingBeast(NULL);
$this->beastRepository->update($beast);

为了能够将属性设置为 NULL,您必须通过将属性默认设置为 NULL 来调整模型,并删除 setter 中的类型提示:

/**
 * missingBeast
 *
 * @var Tx_Hobeast_Domain_Model_MissingBeast
 * @lazy 
 */
 protected $missingBeast = NULL;

/**
 * Sets the missingBeast
 *
 * @param Tx_Hobeast_Domain_Model_MissingBeast $missingBeast
 * @return void
 */
public function setMissingBeast($missingBeast) {
    $this->missingBeast = $missingBeast;
}
于 2013-03-14T18:08:10.840 回答