簡體   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