Объект данных Silverstripe указывает имя таблицы

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

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

<?php
class SalesRep extends DataObject {

private static $table_name = 'tbl_users';

}

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

1

Решение

В настоящее время это невозможно с 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 снова генерируется из имен классов.

3

Другие решения

Это часть использования 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';

...
}

..помните, что весь смысл ORM заключается в том, что класс PHP определяет таблицу, и было бы целесообразно сохранить имя таблицы таким же, как вы хотели бы использовать в коде.

2) Если это обязательно должна быть конкретная таблица, то вы можете указать ее как внешнюю таблицу / контент, и одно из следующих решений может подойти вам лучше всего … «Сохранить на внешнем столе», «Модуль внешнего контента» или же «Модуль внешних данных»

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector