我刚刚迁移到 yii,我创建了一个模型,它用 gii 创建了一个 CActiveRecord,然后我在数据库中进行了一些更改,然后它让我感到困惑,现在我的问题是:
1 - 在对数据库进行任何更改后,我应该使用 gii 重新创建模型吗?为什么 yii 中的 Active Record 比其他框架如 zend 或 codigniter 复杂得多!?
编辑 :
如果我们不应该改变模型类,我们应该把我们的数据库函数放在哪里!!?模型不是这样做的吗?
如果我用 gii 生成模型,它只有一次性工作。快速开始使用这个模型。之后,如果您更改数据库结构(顺便说一句,您没有告诉您所做的更改类型),您可以手动更改模型。
如果您通过 gii 生成模型并且没有更改模型,您可以再次重新生成它(因为没有进行手动更改)。如果您已经更改了它,则无需努力进行更改(并开始学习 ActiveRecord)。
只是为了学习从头开始创建模型(没有 gii)。
EASY
1)进入您的应用程序 index.php 创建全局变量
<?php
$GLOBALS['database'] = "mydbname"; //database name
// change the following paths if necessary
$yii=dirname(__FILE__).'/../yii/framework/yii.php';
$config=dirname(__FILE__).'/protected/config/main.php';
// remove the following lines when in production mode
defined('YII_DEBUG') or define('YII_DEBUG',true);
// specify how many levels of call stack should be shown in each log message
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
require_once($yii);
Yii::createWebApplication($config)->run();
2)在我的模型中创建一个构造方法
class Employees extends CActiveRecord
{
function __construct()
{
$dbname = $GLOBALS['database'];
Yii::app()->db->setActive(false);
Yii::app()->db->connectionString = 'mysql:host=localhost;dbname='.trim($dbname);
Yii::app()->db->setActive(true);
}
3) 如何在我的控制器中使用
public function actionVer3()
{
$GLOBALS['database']="classicmodels"; //dbname
$employee = Employees::model()->findByAttributes(array("employeeNumber"=>"1002"));
print_r($employee);
echo "<br><hr>";
//$this->render("index");
}
简单的方法tnx。
您始终可以使用 Gii 预览它想要应用于现有模型的更改(使用差异链接)。然后您可以应用它们,但如果您在模型(方法)中插入了自定义规则rules()
,它们将被覆盖。是的,如果您对数据库表进行任何更改,您将不得不更新您的 CActiveRecord 子类(您的模型),否则 Yii 将无法看到您的新字段,或者如果它尝试访问它认为拥有的字段则失败但已从数据库中删除。
没有什么能阻止您在模型中编写自定义方法。但是“放置我们的数据库功能”到底是什么意思?
我认为,理想情况下,您应该在数据库结构更改后重新创建模型。
在我们的项目中,我们遵循规则,
请勿对 gii 生成的模型进行任何更改。这样,如果将来有 DB 更改,我们可以直接重新生成模型,而无需进行合并。
这也符合设计哲学,
**Objects** hide their data behind abstractions and expose functions that operate on that data.
**Data structures**
expose their data and have no meaningful functions. It only has methods to operate on data.
ActiveRecords(yii 中的模型)只不过是数据结构。通过在 ActiveRecords 中添加业务规则,您可以混合数据结构和对象。