2017-02-20 8 views
1

SSデータオブジェクトのデフォルトの動作をオーバーライドする方法はありますか?つまり、静的な$table_name propertyを自分のDataObjectに割り当てると、dev/buildは普通のようにDO名でテーブル名を作成しません。ありますか?私は/ devの上のテーブルのSalesRepの作成を防ぐ構築し、また、私は私が$Model->write()をするときということを知ってORMを希望しようとしています。例えばSilverstripeデータオブジェクトはテーブル名を指定します

私はこの非常に小さなデータオブジェクト

<?php 
    class SalesRep extends DataObject { 

     private static $table_name = 'tbl_users'; 

    } 

を持っています。テーブルsalesrepの代わりにテーブルtbl_usersを書いています

+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

これは、SilverStripe内のORMを使用していて、使い慣れたものです。私は、おそらくその後、ソリューションがsingular_namePLURAL_NAMEを使用することで、あなたの目標は、ユーザーに特定の名前を提示することであるならば)... 2つの異なる方法でこれを

1を見ますが、別のテーブル名を持っているでしょう、その後、あなたが望むしかし、DataObjectの名前を付けることは自由です... ORMの全体のポイント..remember

class tbl_users extends DataObject { 

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

    ... 
} 

は、PHPクラスは、テーブルを定義し、それがテーブル名を維持するために理にかなっていることですコードで使用したいのと同じです。

2)それは絶対的に特定のテーブルであることを持っている場合、あなたは外部表/コンテンツと、次の解決策の一つとして、それを指定することができますあなたに合うかもしれない最高の... "Save to external Table""External Content Module"または"External Data Module"

関連する問題