On SS 4.0.3 I'm just trying to make a relation between a SiteConfig
extension and a DataObject
. The DataExtension
has a has_many
relation pointing to a correspondent has_one
in the DataObject
. On /dev/build?flush=all
the CMS throw me the following exception, and I don't understand why.
To be precise; DataObject
as Cassa
and DataExtension
as ConfigurazioneExtension
:
This is the mesage:
[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'
Here's the code:
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...
Are some types of relations prohibited between DataObjects and DataExtensions?
Thanks in advance for your help.
In your Cassa model you should reference SiteConfig, not the extension for it:
use SilverStripe\SiteConfig\SiteConfig;
// ...
private static $has_one = [
'ConfigurazioneExtension' => SiteConfig::class
]; // etc...
Extensions are applied to the configuration of the object that they extend, so you should reference the original DataObject (in this case SiteConfig) whenever you're defining relationships, looking up configuration, referencing methods etc. You don't need to reference them directly (generally).