2012-06-21 28 views
5

Quan hệ hoặc sự khác biệt giữa ActiveRecord và mô hình trong YII là gì?sự khác biệt giữa ActiveRecord và model() trong yii?

tôi đang cố gắng đăng nhập is_object(CActiveRecord::model('Project')); và mong đợi false nhưng đã trả lại true;

Vì ghi nhật ký chỉ ra rằng đó là một đối tượng, tôi nghĩ rằng nó đại diện cho một hàng trong bảng, nhưng tôi không thể tìm thấy bất kỳ thuộc tính đại diện cho các coloumns.

Ngoài ra http://www.yiiframework.com/doc/api/1.1/CActiveRecord#model-detail nói rằng nó trả về một thể hiện của lớp CActiveRecord, nhưng tôi không thể tìm thấy bất kỳ giá trị nào của hàng trong bảng trong đối tượng đó.

+0

Đã làm việc với Yii trong một vài tháng, tôi thấy thật kỳ lạ khi lớp ActiveRecord xử lý cả ActiveRecord và mô hình. Nó chỉ cảm thấy kỳ lạ với tôi. –

Trả lời

8

Câu trả lời là trong liên kết tài liệu của bạn, model() là một phương pháp cấp lớp, và nó:

Trả lại mô hình tĩnh của lớp AR được chỉ định. Mô hình được trả về là một cá thể tĩnh của lớp AR. Nó được cung cấp cho cách gọi phương pháp lớp cấp

Hãy nói rằng bạn làm (một cái gì đó tương tự như phương pháp lớp tĩnh.): $model=CActiveRecord::model('Project');, sau đó sử dụng mà $model bạn có thể gọi tất cả các phương pháp cấp lớp của CActiveRecord, như:

$allModels = $model->findAll(); // will give you all the models of Project 
$someModel = $model->findByPk('pkValue'); // will give you the row with primary key value = pkValue 
$model->deleteAll(); // will delete all the records of Project 
// and so on 

Edit:

Cũng this post trong diễn đàn này nói: (Chênh lệch giữa mức lớp và tĩnh gặp hods)

Phương thức cấp lớp có hiệu quả Phương pháp tĩnh NHƯNG với lợi ích có thể sử dụng thừa kế. Tức là, bạn có thể ghi đè lên hoạt động của một Phương thức Cấp Lớp trong một lớp con, trong khi nếu bạn sử dụng một phương thức tĩnh, bạn sẽ không thể ghi đè nó. .... Vì vậy, nói chung, bạn nên sử dụng các phương thức mức lớp, không phải các phương thức tĩnh, vì nó mang lại cho bạn lợi ích của việc thừa kế mặc dù nó có thể hơi lạ. Sau đó, bạn gọi chúng bằng cách sử dụng $ class :: model() -> method().

2

ActiveRecord là mẫu. Một mẫu để lưu trữ dữ liệu trong cơ sở dữ liệu quan hệ. Mô hình, trong mẫu MVC, là một phần của dữ liệu. Vì vậy, Yii là một khung MVC thực hiện ActiveRecord cho mô hình.

mô hình phương pháp này là

public static function model($className=__CLASS__) 
{ 
    if(isset(self::$_models[$className])) 
     return self::$_models[$className]; 
    else 
    { 
     $model=self::$_models[$className]=new $className(null); 
     $model->_md=new CActiveRecordMetaData($model); 
     $model->attachBehaviors($model->behaviors()); 
     return $model; 
    } 
} 

Như bạn thấy trả về một đối tượng

+0

Cảm ơn bạn. Câu trả lời đơn giản và đầy đủ. – shgnInc

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