如何在TYPO3和Extbase中使用标准字段如crdate和cruser_id?

7
我有购物篮(Basket)和商品(Article)这两个领域模型。如果我调用以下内容,我会在购物篮中获得商品。
$articlesInBasket = $basket->getArticles();

我该如何使用TYPO3标准属性,比如crdate和cruser_id?类似以下方式会更好:

$basket->getCrUser();
$basket->getCrDate();

Typo3 8.7.x中,您需要在模型的TCA中添加字段到列配置。 - Vikram
3个回答

17

此方法适用于TYPO3 8.7和9.5版本

模型:

/**
 * @var \DateTime
 */
protected $crdate = null;


/**
 * Returns the creation date
 *
 * @return \DateTime $crdate
 */
public function getCrdate()
{
    return $this->crdate;
}

TCA -> 将其添加到列中;

'columns' => [
    'crdate' => [
        'config' => [
            'type' => 'passthrough',
        ],
    ],

    ...

]

7

首先,表格字段被命名为crdatecruser,因此获取器应该命名为getCrdategetCruser

接下来,在您的模型中,您需要添加一个字段和一个getter:

/** @var int */
protected $crdate;

/**
* Returns the crdate
*
* @return int
*/
public function getCrdate() {
    return $this->crdate;
}

对于cruser字段,做同样的操作。

最后,在您的setup.txt文件中,您很可能需要为这些字段添加映射:

config.tx_extbase.persistence.classes {
    Tx_Someext_Domain_Model_Somemodel {
        mapping {
            columns.crdate.mapOnProperty = crdate
            columns.cruser.mapOnProperty = cruser    
        }
    }
}

当然,在设置中不要忘记使用正确的名称,在代码更改后清除缓存。

谢谢 - crdate 可以用。但我无法获取 cruser_id 后面的用户。你有将 cruser_id 映射到域模型的示例吗? - koalabruder
1
你可以在类型定义文件中使用映射来创建更好的变量名。也许你需要在be_users表中添加关联。 - pgampe
2
crdate 不是一个字符串,而是一个 int(11) 无符号整数。因此应该改为 /** @var int */。 - Jonathan Gruber
我结合了你和webMans的答案。在我的情况下需要映射,这就是为什么webMans的解决方案对我来说并不完全适用的原因。除了int之外,也可以使用\DateTime。但是它非常有效! - Kathara

6
这对我来说在TYPO3 6.2.11上起作用。
模型:
/**
 * tstamp
 *
 * @var int
 */
protected $tstamp;


/**
 * @return int $tstamp
 */
public function getTstamp() {
    return $this->tstamp;
}

TS:

config.tx_extbase.persistence.classes {
    STUBR\Stellen\Domain\Model\Institution {
        mapping {
            tableName = tx_stellen_domain_model_institution
            columns {
                tstamp.mapOnProperty = tstamp
            }
        }
    }
}

PS Thanks https://github.com/castiron/cicbase


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接