2017-02-20 3 views
1

Есть ли способ переопределить поведение по умолчанию объектов данных SS таким образом, что когда я назначаю статический $table_name property моему DataObject, dev/build не создает имя таблицы с именем DO, как обычно делает?Объект данных Silverstripe указывает имя таблицы

Например, у меня есть этот очень маленький объект Data

<?php 
    class SalesRep extends DataObject { 

     private static $table_name = 'tbl_users'; 

    } 

Я пытаюсь предотвратить создание таблицы SalesRep на разработчика/построить, а также я хотел бы ОРМ знать, что, когда я делаю $Model->write(); Я пишу к столу tbl_users вместо таблицы salesrep

+0

'table_name' доступен только с SilverStripe 4, который все еще находится в альфа-режиме. Возможно, вы используете другую версию SilverStripe 4, или функция не реализована должным образом (пока?) – bummzack

ответ

3

В настоящее время это невозможно с SilverStripe 3.x. SilverStripe использует принцип «соглашение по конфигурации», а таблицы базы данных всегда имеют то же имя, что и связанный DataObject.

Однако в SS4 с пространством имен вы сможете определить имя табуляции в своей конфигурации. Как уже отмечал @bummzack, в настоящее время это альфа.

Однако, вы можете попытаться переписать DataObject-х getBaseTable(), какой метод, как:

/** 
* Get the name of the base table for this object 
*/ 
public function baseTable() { 

    return 'tbl_users'; 
} 

, но я сомневаюсь, что он будет работать без проблем, потому что в других местах baseTable свойство - опять-таки - генерируется из ряда имена классов.

+0

Я использую Silverstripe 3.2. Теперь я понимаю, почему даже 'baseTable()' не работает. Silverstripe - действительно хорошая структура, но в некоторых областях она не хватает. –

1

Это часть использования ORM, которая находится в SilverStripe, и может занять некоторое время. Я бы, возможно, взглянуть на это два различных способах ...

1) Если ваша цель состоит в том, чтобы представить определенное имя пользователя, но имеет другое название таблицы, то решение заключается в использовании singular_name и plural_name, а затем вы можете назвать DataObject однако вы хотите ...

class tbl_users extends DataObject { 

    private static $singular_name  = 'Sales Rep'; 
    private static $plural_name  = 'Sales Reps'; 

    ... 
} 

..remember всей точки ОРМ является то, что класс PHP определяет таблицу и было бы целесообразно, чтобы сохранить имя таблицы так же, как вы хотели бы использовать в коде.

2) Если он абсолютно должен быть определенный стол, то вы можете указать его в качестве внешнего табличного/контента и один из следующих решений может подойдет вам лучше всего ... "Save to external Table", "External Content Module" или "External Data Module"

Смежные вопросы