在 SS 4.0.3 上,我只是尝试在 SiteConfig
扩展和 DataObject
之间建立关系。 DataExtension
具有一个 has_many
关系,指向 DataObject
中对应的 has_one
。
在 /dev/build?flush=all
上,CMS 向我抛出以下异常,我不明白为什么。
准确地说; DataObject
作为 Cassa
和 DataExtension
作为 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/