Extbase update deleted = Controller中的1个对象失败(未找到标识x的对象)

时间:2014-02-10 13:58:00

标签: typo3 extbase

我想在我的FE-Ext中提供'恢复'已删除对象的功能。看来,它没有找到任何删除的记录,所以我无法更新它们设置deleted = 0。

你要从控制器那里处理什么?:

$query->getQuerySettings()->setIgnoreEnableFields(TRUE);
$query->getQuerySettings()->setIncludeDeleted(TRUE);

谢谢。

3 个答案:

答案 0 :(得分:1)

我不太确定“来自控制器”是什么意思。通常,您在存储库中实现它,只需从控制器调用该方法。

在你的回购中:

public function findRecordEvenIfItIsDeleted($uid) {
    $query = $this->createQuery();
    $settings = $query->getQuerySettings();
    settings->setIgnoreEnableFields(TRUE);
    settings->setIncludeDeleted(TRUE);
    $query->matching($query->equals('uid', $uid));
    return $query->execute();
}

在您的控制器中:

$myObject = $this->myRepsository->findRecordEvenIfItIsDeleted($uid);

完成。 (当然你的存储pid必须设置(或者也禁用尊重存储页面)

答案 1 :(得分:0)

您正在添加不会抛出任何错误,因为您要将querySettings设置为包含已删除的记录。但也许,即使在更新时也必须启用此设置,因为存储库应找到您要更新的对象。 我没有测试过,但试一试。

在您的存储库中(只是一个伪代码)

public function update($modifiedObject) {
    settings->setIncludeDeleted(TRUE);
    parent::update($modifiedObject);
}

答案 2 :(得分:0)

我知道很久以前就问过这个问题,但今天我遇到了一个与隐藏物体类似的问题。我的解决方案就是这个:

将此添加到您的模型(在您的情况下,将“隐藏”替换为“已删除”):

/**
 * @var boolean
 */
protected $hidden;


/**
 * @return boolean $hidden
 */
public function getHidden() {
    return $this->hidden;
}

/**
 * @return boolean $hidden
 */
public function isHidden() {
    return $this->getHidden();
}

/**
 * @param boolean $hidden
 * @return void
 */
public function setHidden($hidden) {
    $this->hidden = $hidden;
}
存储库中的

添加此功能以查找已删除/隐藏的对象:

public function findHiddenByUid($uid) {
    $query = $this->createQuery();
    $query->getQuerySettings()->setIgnoreEnableFields(TRUE);
    $query->getQuerySettings()->setEnableFieldsToBeIgnored(array('disabled','hidden'));
    return $query
    ->matching($query->equals('uid', $uid))
    ->execute()
    ->getFirst();
}

现在在您的控制器中,您可以阅读该对象,设置“隐藏”选项并进行更新:

$yourobject = $this->yourobjectRepository->findHiddenByUid($uid);
$yourobject->setHidden(1);
$this->yourobjectRepository->update($yourobject);

对你的任务可能没有意义,但对其他人来说: 在我的情况下,我还有一个问题是将表单中的隐藏对象发布到操作。请注意,如果您想通过表单发布对象,则首先将对象删除/隐藏选项设置为0更好(或可能是必要的)。