2011-08-20 45 views
6

Trong Doctrine 1.2, có thể thiết lập Key Mapping cho một bảng trong đó Doctrine_Collection đối tượng được tạo bởi bảng đó sẽ điền các phím từ một cột cụ thể trong mỗi bản ghi trong bộ sưu tập.Thiết lập thuộc tính ánh xạ khóa Doctrine_Collection trong schema.yml

Một ví dụ từ các tài liệu liên kết ở trên:

Bạn có thể muốn để lập bản đồ cột và tên:

// test.php 

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

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

Bây giờ bộ sưu tập người dùng sẽ sử dụng các giá trị của cột tên như chỉ số phần tử:

// test.php 

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

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

Có cách nào để thiết lập điều này trong sc hema.yml tập tin?

Trả lời

5

Trong khi khám phá một vấn đề tương tự, tôi tình cờ gặp this example:

--- 
User: 
    columns: 
    ... 
    attributes: 
    export: all 
    validate: true 

Áp dụng nguyên tắc tương tự với các thuộc tính coll_key mang này:

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

Chúng tôi có thể xác minh sau khi làm một xây dựng rằng thuộc tính đã được chấp nhận:

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

Có một thông báo trước.Bạn cần phải rõ ràng tạo ra các cột mà bạn muốn sử dụng, nếu không thuyết sẽ ném ra một lỗi trong quá trình xây dựng:

User: 
    actAs: 
    Sluggable: ~ 
    columns: 
    ... 
    attributes: 
    coll_key: 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'.

Để có được ở trên để làm việc, bạn sẽ cần phải xác định một cách rõ ràng slug , mặc dù mẫu Sluggable thường tự động tạo cho bạn:

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

Nếu có thể, nó không được ghi chép đầy đủ. Bạn có thể chỉ định các tùy chọn cho một bảng trong định nghĩa bảng, like this Biết rằng

const ATTR_COLL_KEY    = 108; 

tôi sẽ cố gắng:

User: 
    options: 
    attr_coll_key: username 

sau đó

User: 
    options: 
    attrCollKey: username 

hoặc thậm chí

User: 
    options: 
    108: username 

Tôi không thể tìm thấy chính xác vị trí trong mã mà các tùy chọn được xử lý, nhưng bạn có thể thực hiện việc này bằng cách gỡ rối từng bước xdebug.

Chúc bạn may mắn và hãy sử dụng nếu một trong các tính năng này hoạt động.

+0

Cảm ơn bạn đã đề xuất; họ là một điểm khởi đầu tuyệt vời! Tôi đã có thể làm cho nó hoạt động bằng cách xác định nó như là một thuộc tính chứ không phải là một lựa chọn (xem câu trả lời của tôi để biết thêm thông tin). –

+0

@Phoenix: không biết rằng bạn có thể đặt thuộc tính trong giản đồ, công việc tuyệt vời! – greg0ire

Các vấn đề liên quan