2011-08-03 16 views
10

Tôi có trường country_id trong một trong các mô hình của tôi và thay vì tạo bảng countries chứa danh sách các quốc gia không thay đổi, cách tiếp cận tốt nhất cho điều này là gì?Làm thế nào để sử dụng các mô hình không có cơ sở dữ liệu trên CakePHP và có các liên kết?

Tôi đang nghĩ về việc sử dụng mô hình không có bảng cơ sở dữ liệu nhưng tôi không biết cách triển khai.

Vui lòng trợ giúp. Cảm ơn trước!

Trả lời

10

tôi sẽ đề nghị sử dụng ArraySource từ cộng đồng duy trì CakePHP Datasources plugin:

Tải toàn bộ Plugin và trích xuất nội dung theo số app/plugins/datasources.

Xác định một kết nối đến nguồn dữ liệu trong app/config/database.php:

public $array = array('datasource' => 'Datasources.array'); 

này sẽ cho phép bạn để mô phỏng một bảng bằng cách định nghĩa các bản ghi trong mô hình của bạn:

class Country extends AppModel { 

    public $useDbConfig = 'array'; 

    public $records = array(
     array('id' => 1, 'name' => 'Test record') 
    ); 

} 
+0

bạn có biết tài liệu cho các nguồn dữ liệu này ở đâu không? cảm ơn –

+0

Ngoài [readme file] của kho lưu trữ (https://github.com/cakephp/datasources#readme), tài liệu khác duy nhất nằm trong docblocks cho một vài nguồn dữ liệu ([amazon] (https://github.com) /cakephp/datasources/blob/c8da44d638c9fa5c9baada7ead7f366bdb1d03e1/models/datasources/amazon_associates_source.php#L22)|[csv](https://github.com/cakephp/datasources/blob/c8da44d638c9fa5c9baada7ead7f366bdb1d03e1/models/datasources/csv_source.php#L22)). Để tìm các tùy chọn cấu hình cho mỗi nguồn dữ liệu, hãy tìm '_baseConfig' hoặc các thể hiện của" config ". Các tài liệu khác trong mã sẽ là một cải tiến rõ ràng. – deizel

+0

chắc chắn là một cách tiếp cận tốt đẹp. chưa biết về điều đó. sẽ kiểm tra nó. Tôi đã từng làm điều này theo cách này cho đến bây giờ: http://www.dereuromark.de/2010/06/24/static-enums-or-semihardcoded-attributes/ – mark

1

Như thay thế, nếu không có các dữ liệu khác gắn liền với đất nước bên cạnh, về cơ bản, một id của những gì đất nước nó được, bạn có thể có thể giữ nó trong cùng một mô hình mà không cần hiệp hội. Một cái gì đó dọc theo dòng:

class MyModel extends AppModel { 

    public static $countries = array(
     'Africa', 'America', ..., 'Zululand' 
    ); 

    public $validate = array(
     'country' => array(
      'rule' => array('inList', self::$countries), 
      ... 
     ) 
    ) 

} 
+2

Tôi chưa từng đến quốc gia 'Châu Phi';) – tsukimi

15

bạn totaly có thể sử dụng cú pháp không có bảng:

class ModelWithoutTable extends AppModel 
{ 
    var $useTable = false; 
} 

có Tableless Nước mẫu này, nhưng bạn cần phải thử một nguồn dữ liệu (ví dụ XML, YAML, PHP Array và vv) cho các dữ liệu quốc gia.

Hy vọng điều này sẽ hữu ích.

+0

Cảm ơn .. Làm việc như say mê. :) –

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