Php 与Silverstripe Fluent的多关系问题
我们正在进行一个Silverstripe项目,使用来显示多个翻译/地区 我们希望设置一些数据对象,以便可以切换记录,使其仅在某些流畅的语言环境中显示。其想法是在数据对象上有一个复选框字段,用户可以在其中选择希望记录显示的区域设置 以下是一个示例数据对象:Php 与Silverstripe Fluent的多关系问题,php,silverstripe,silverstripe-4,Php,Silverstripe,Silverstripe 4,我们正在进行一个Silverstripe项目,使用来显示多个翻译/地区 我们希望设置一些数据对象,以便可以切换记录,使其仅在某些流畅的语言环境中显示。其想法是在数据对象上有一个复选框字段,用户可以在其中选择希望记录显示的区域设置 以下是一个示例数据对象: namespace Yard; use SilverStripe\ORM\DataObject; use TractorCow\Fluent\Model\Locale; class Milkshake extends DataObject
namespace Yard;
use SilverStripe\ORM\DataObject;
use TractorCow\Fluent\Model\Locale;
class Milkshake extends DataObject {
private static $table_name = 'Milkshake';
private static $db = [
'Title' => 'Varchar(255)'
]
private static $belongs_many_many = [
'ShowInLocale' => 'Locale'
];
}
class LocaleMilkshake extends DataObject
{
private static $table_name = 'LocaleMilkshake';
private static $has_one = [
'Milkshake' => 'Yard\Milkshake',
'Locale' => 'TractorCow\Fluent\Model\Locale'
];
}
然后我们需要扩展Locale类:
namespace AppExtensions;
use SilverStripe\ORM\DataExtension;
class LocaleExtension extends DataExtension
{
private static $many_many = [
'Milkshakes' => 'Yard\Milkshake'
];
}
并通过YML应用该扩展:
TractorCow\Fluent\Model\Locale:
extensions:
- 'AppExtensions\LocaleExtension'
到目前为止还不错-但当我尝试在管理员中查看“Milkshake”时,我收到以下错误消息:
[紧急情况]未捕获逻辑异常:属于多个关系
Yard\Milkshake.ShowInLocale指向不匹配的区域设置
许多
据我所知,我已经添加了一个匹配的many\u many
关系:数据库记录已经创建
非常感谢您对如何修复此问题的任何意见。我使用通过单独的数据对象建立连接
奶昔对象已从$beliens\u many
(这是不正确的)更改为$many\u many
,具有“直通”对象关系:
class Milkshake extends DataObject {
private static $many_many = [
'ShowInLocale' => [
'through' => LocaleMilkshake::class,
'from' => 'Milkshake',
'to' => 'Locale'
]
];
以下是我创建复选框的方式:
$fields = parent::getCMSFields();
$showInLocaleField = CheckboxSetField::create(
'ShowInLocale',
'Show in these Locales',
Locale::get()->map('ID','Title');
);
$fields->addFieldToTab('Root.Main', $showInLocaleField);
并定义了一个单独的数据对象:
namespace Yard;
use SilverStripe\ORM\DataObject;
use TractorCow\Fluent\Model\Locale;
class Milkshake extends DataObject {
private static $table_name = 'Milkshake';
private static $db = [
'Title' => 'Varchar(255)'
]
private static $belongs_many_many = [
'ShowInLocale' => 'Locale'
];
}
class LocaleMilkshake extends DataObject
{
private static $table_name = 'LocaleMilkshake';
private static $has_one = [
'Milkshake' => 'Yard\Milkshake',
'Locale' => 'TractorCow\Fluent\Model\Locale'
];
}
并将Locale
关系更改为$owners\u many\u many
:
class LocaleExtension extends DataExtension
{
private static $belongs_many_many = [
'Milkshakes' => 'Yard\Milkshake'
];
}