SilverStripe 4 - DataExtension 上的 has_many 关系

SilverStripe 4 - has_many relation on DataExtension

在 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...

ConfigurazioneExtension

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

DataObjects 和 DataExtensions 之间是否禁止某些类型的关系?

在此先感谢您的帮助。

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

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

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

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