2011-08-20 3 views
6

Doctrine 1.2では、Doctrine_Collectionオブジェクトがそのテーブルで作成されたテーブルにKey Mappingを設定して、コレクション内の各レコードの特定の列のキーを設定することができます。schema.ymlにDoctrine_Collectionキーマッピング属性を設定する

// test.php 

// ... 
$userTable = Doctrine_Core::getTable('User'); 

$userTable->setAttribute(Doctrine_Core::ATTR_COLL_KEY, 'username'); 

今すぐユーザーコレクションは要素インデックスとして名列の値を使用します:

あなたが名前列をマップすることがあり

ドキュメントからの例では、上記のリンク

// test.php 

// ... 
$users = $userTable->findAll(); 

foreach($users as $username => $user) { 
    echo $username . ' - ' . $user->created_at . "\n"; 
} 

これをscに設定する方法はありますかhema.ymlファイル?

答えて

5

同様の問題を探索しながら、私はthis example出くわし:

coll_key属性と同じ原理を適用し
--- 
User: 
    columns: 
    ... 
    attributes: 
    export: all 
    validate: true 

これが得られます。

User: 
    columns: 
    ... 
    attributes: 
    coll_key: username 

私たちはやって後に確認することができます属性が受け入れられたことを確認します。

$this->setAttribute(Doctrine_Core::ATTR_COLL_KEY, 'username'); 

ただし、注意点が1つあります。あなたが明示的slugを指定する必要があり、上記の作業を取得するには

$ symfony doctrine:build --all --no-confirmation 
>> doctrine Dropping "doctrine" database 
>> doctrine Creating "dev" environment "doctrine" database 
>> doctrine generating model classes 
>> file+  /tmp/doctrine_schema_60681.yml 
    ... 
>> doctrine generating form classes 

    Couldn't set collection key attribute. No such field 'slug'.

User: 
    actAs: 
    Sluggable: ~ 
    columns: 
    ... 
    attributes: 
    coll_key: slug 
:あなたは明示的に使用したい列を作成する必要があり、さもなければDoctrineはビルドプロセス中にエラーがスローされますたとえ Sluggableテンプレートで作成されたテンプレートであっても、自動的に作成されます。

User: 
    actAs: 
    Sluggable: ~ 
    columns: 
    ... 
    slug: 
     type: string(50) 
     unique: true 
    attributes: 
    coll_key: slug 
0

可能であれば、それは十分に文書化されていません。その後、

User: 
    options: 
    attr_coll_key: username 

User: 
    options: 
    attrCollKey: username 

あるいは

User: 
    options: 
    108: username 
: あなたは like this

const ATTR_COLL_KEY    = 108; 

は、私がしようとするだろうことを知って、テーブル定義のテーブルのオプションを指定することができます0

コード内でオプションが処理される場所を正確に見つけることができませんでしたが、xdebugの段階的なデバッグでこれを行うことができます。

幸運にも、これらの試行のいずれかが有効な場合は、ご指示ください。

+0

ありがとうございました。彼らは優れた出発点でした!私はそれをオプションではなく属性として指定することでそれを動作させることができました(詳細については私の答えを見てください)。 –

+0

@Phoenix:あなたがスキーマ内の属性を設定できるということを知りませんでした。 – greg0ire

関連する問題