Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 与Silverstripe Fluent的多关系问题_Php_Silverstripe_Silverstripe 4 - Fatal编程技术网

Php 与Silverstripe Fluent的多关系问题

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

我们正在进行一个Silverstripe项目,使用来显示多个翻译/地区

我们希望设置一些数据对象,以便可以切换记录,使其仅在某些流畅的语言环境中显示。其想法是在数据对象上有一个复选框字段,用户可以在其中选择希望记录显示的区域设置

以下是一个示例数据对象:

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'
    ];
}