[英]Problem with many_many relationship with Silverstripe Fluent
我们正在使用Fluent开发一个 Silverstripe 项目,以显示多种翻译/语言环境。
我们想要设置一些数据对象,以便可以将记录切换为仅在某些 Fluent Locales 中显示。 我们的想法是在数据 object 上有一个复选框字段,用户可以在其中 select 他们希望记录显示在哪个区域设置中。
这是一个示例数据 object:
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:
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'
到目前为止一切顺利 - 但是当我尝试在管理员中查看“奶昔”时,我收到以下错误消息:
[紧急] 未捕获的 LogicException:belongs_many_many 关系 Yard\Milkshake.ShowInLocale 指向 Locale 而不匹配 many_many
据我所知,我添加了一个匹配的many_many
关系:数据库记录已创建。
任何关于我应该如何解决这个问题的想法都值得赞赏。
我使用$many_many through
功能通过单独的数据 object 建立连接。
奶昔 object 从$belongs_many_many
(这是不正确的)更改为$many_many
并具有“通过” object 关系:
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);
并定义了单独的数据object:
class LocaleMilkshake extends DataObject
{
private static $table_name = 'LocaleMilkshake';
private static $has_one = [
'Milkshake' => 'Yard\Milkshake',
'Locale' => 'TractorCow\Fluent\Model\Locale'
];
}
并将Locale
关系更改为$belongs_many_many
:
class LocaleExtension extends DataExtension
{
private static $belongs_many_many = [
'Milkshakes' => 'Yard\Milkshake'
];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.