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