2012-03-06 22 views
21

Tôi không chắc chắn cách tốt nhất để tải các mô hình trong CakePHP 2.0 ngay bây giờ là gì.Cách tốt nhất để tải các mô hình trong CakePHP 2.0


Câu hỏi 1

Tôi có một mô hình có nhiều hơn một lĩnh vực cơ sở dữ liệu có liên quan đến mô hình khác.

customers bảng có các trường country_origin, country_residencecountry_study và tất cả các trường đó chứa ID từ bảng countries.

Vì vậy, trong mô hình Khách hàng của tôi, tôi phải tải mô hình Quốc gia như thế nào?


Câu hỏi 2

đã Controller::loadModel() bị phản đối hoặc là nó xấu thực hành để sử dụng này? Làm thế nào tôi có thể tải một mô hình trong bộ điều khiển?


Câu hỏi 3

Khi hay tại sao bạn phải sử dụng App::uses() trong một bộ điều khiển hay mô hình? Tôi không hiểu được điểm khi các mô hình sẽ được tải anyway nếu bạn sử dụng phương pháp bình thường như loadModel(), hasOne, hasMany, belongsTo vv

Trả lời

61

này cần được đơn giản để hiểu. Nếu bạn đang sử dụng một bộ điều khiển và bạn cần phải tải một mô hình khác, bạn có thể gọi:

$this->loadModel('SomeModel'); 

Sau đó, bạn có thể thực hiện cuộc gọi đến các mô hình như bạn bình thường:

$this->SomeModel->read(null, '1'); 

App::uses là cho tải lười biếng các lớp học. Vì vậy, bạn vẫn có thể tải một mô hình sử dụng công dụng:

App::uses('MyModel', 'Model'); 

Nhưng sau đó bạn sẽ cần phải gọi một cách khác:

$MyModel = new MyModel(); 
$MyModel->read(null, '1'); 

hoặc

MyModel::read(null, '1'); 

Nó chỉ phụ thuộc vào địa điểm và cách bạn muốn sử dụng nó.

+5

Tôi đã cố gắng để tải một mẫu từ một hành vi, cả hai bên trong Plugin tương tự. Trong trường hợp này, bạn phải sử dụng: 'App :: use ('MyModelName', 'MyPluginName.Model');' trong hành vi và 'App :: sử dụng ('MyPluginNameAppModel', 'MyPluginName.Model');' trong được gọi là tệp MyModelName. – colares

+0

Đã lưu ngày của tôi! Cảm ơn. –

+0

Điều gì về việc sử dụng 'public $ uses = array ('Model1', 'Model2');' trong bộ điều khiển? Tôi muốn biết nếu '$ uses' được ưa thích hơn' $ this-> loadModel() '. – JadedCore

3

Cách ưa thích là

$this->load('MyModel'); 

Tuy nhiên, bạn cũng có thể sử dụng

public $uses = array('DefaultModel', 'MyModel'); 
. 
. 
$this->MyModel->field(...); 

Bánh hỗ trợ cả và bạn có thể tự do sử dụng bất cứ ai bạn muốn.

0

Đối với Câu hỏi 1

Theo cấu trúc của bạn có một mối liên hệ giữa khách hàng và Country mô hình tôi nghĩ rằng vì vậy chúng tôi không cần phải tải mô hình. Chúng ta có thể tạo sự liên kết ảo cho mỗi id chẳng hạn như,

'CountryOrigin' => array(
    'className' => 'Country', 
    'foreignKey' => 'country_origin_id', 
    'dependent' => true, 
    'conditions' => '', 
    'fields' => '', 
    'order' => '', 
    'limit' => '', 
    'offset' => '', 
    'exclusive' => '', 
    'finderQuery' => '', 
    'counterQuery' => '' 
) 


'CountryResidence' => array(
    'className' => 'Country', 
    'foreignKey' => 'country_residence_id', 
    'dependent' => true, 
    'conditions' => '', 
    'fields' => '', 
    'order' => '', 
    'limit' => '', 
    'offset' => '', 
    'exclusive' => '', 
    'finderQuery' => '', 
    'counterQuery' => '' 
) 

Bằng cách này chúng ta có thể tạo ra một mối liên hệ giữa mô hình nên chúng tôi không muốn tải mô hình một cách rõ ràng

mô hình tải là tốt khi chúng ta don 't có một hiệp hội cho rằng chúng ta có thể sử dụng như là,

Cú pháp cho tải model là đối với mô hình đơn tải

$this->loadModel('Country'); 

Điều này sẽ hữu ích hơn nếu chúng ta muốn tải mô hình cho hành động hoặc điều kiện cụ thể

Nếu chúng ta sử dụng bộ điều khiển, chúng tôi có thể sử dụng biến số sử dụng $ Để tải nhiều mô hình.

public $uses = array('Country','OtherModel'); 

chúng ta có thể truy cập vào mô hình như thế nào,

$this->Country->find('count'); 
Các vấn đề liên quan