繁体   English   中英

与 Silverstripe Fluent 的 many_many 关系存在问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM