php - SilverStripe 4 - DataExtension 上的 has_many 关系

标签 php silverstripe silverstripe-4

在 SS 4.0.3 上,我只是尝试在 SiteConfig 扩展和 DataObject 之间建立关系。 DataExtension 具有一个 has_many 关系,指向 DataObject 中对应的 has_one。 在 /dev/build?flush=all 上,CMS 向我抛出以下异常,我不明白为什么。

准确地说; DataObject 作为 CassaDataExtension 作为 ConfigurazioneExtension:

这是消息:

[Emergency] Uncaught Exception: No has_one found on class 'Cassa', the has_many relation from 'SilverStripe\SiteConfig\SiteConfig' to 'Cassa' requires a has_one on 'Cassa'

代码如下:

卡萨

/**
 * Classe Cassa
 */
class Cassa extends MetodoPagamento
{
    // Dichiarazione Proprietà
    private static $db = [
        'Iban' => 'Varchar',
        'IstitutoCredito' => 'Text'
    ];
    private static $has_one = [
        'ConfigurazioneExtension' => 'ConfigurazioneExtension'
    ]; // etc...

配置扩展

/**
 * Classe Configurazione - Estensione
 */
class ConfigurazioneExtension extends DataExtension
{
    // Dichiarazione Proprietà
    private static $has_many = [
        'Casse' => 'Cassa'
    ]; // etc...

DataObject 和 DataExtension 之间是否禁止某些类型的关系?

预先感谢您的帮助。

最佳答案

在您的 Cassa 模型中,您应该引用 SiteConfig,而不是它的扩展:

use SilverStripe\SiteConfig\SiteConfig;
// ...

private static $has_one = [
    'ConfigurazioneExtension' => SiteConfig::class
]; // etc...

扩展应用于它们扩展的对象的配置,因此每当您定义关系、查找配置、引用方法等时,都应该引用原始 DataObject(在本例中为 SiteConfig)。您不需要直接引用它们(通常)。

关于php - SilverStripe 4 - DataExtension 上的 has_many 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49735768/

相关文章:

php - Laravel orwhere 和 whereBetween 查询不能一起工作

PHP + MySQL - 获取行并平均分配

php - 如何获取cookie的过期时间

php - 无法将Silverstripe 4错误日志写入电子邮件

silverstripe - 如何在 silverstripe 中堆叠 CMS 字段标签?

银条4 : Member Login and Redirect to specific page

PHP - $_POST 变量与同名变量混合

silverstripe - 默认情况下显示silverstripe ModelAdmin

php - Silverstripe 在模板内循环 has_many

php - DataExtension 中的 SilverStripe insertHeadTags