1

我刚刚迁移到 yii,我创建了一个模型,它用 gii 创建了一个 CActiveRecord,然后我在数据库中进行了一些更改,然后它让我感到困惑,现在我的问题是:

1 - 在对数据库进行任何更改后,我应该使用 gii 重新创建模型吗?为什么 yii 中的 Active Record 比其他框架如 zend 或 codigniter 复杂得多!?

编辑 :

如果我们不应该改变模型类,我们应该把我们的数据库函数放在哪里!!?模型不是这样做的吗?

4

4 回答 4

1

如果我用 gii 生成模型,它只有一次性工作。快速开始使用这个模型。之后,如果您更改数据库结构(顺便说一句,您没有告诉您所做的更改类型),您可以手动更改模型。

如果您通过 gii 生成模型并且没有更改模型,您可以再次重新生成它(因为没有进行手动更改)。如果您已经更改了它,则无需努力进行更改(并开始学习 ActiveRecord)。

只是为了学习从头开始创建模型(没有 gii)。

于 2013-04-12T05:59:48.037 回答
0

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。

于 2014-07-15T17:18:23.810 回答
0

您始终可以使用 Gii 预览它想要应用于现有模型的更改(使用差异链接)。然后您可以应用它们,但如果您在模型(方法)中插入了自定义规则rules(),它们将被覆盖。是的,如果您对数据库表进行任何更改,您将不得不更新您的 CActiveRecord 子类(您的模型),否则 Yii 将无法看到您的新字段,或者如果它尝试访问它认为拥有的字段则失败但已从数据库中删除。

没有什么能阻止您在模型中编写自定义方法。但是“放置我们的数据库功能”到底是什么意思?

于 2013-04-12T05:34:32.587 回答
-1

我认为,理想情况下,您应该在数据库结构更改后重新创建模型。

在我们的项目中,我们遵循规则,

请勿对 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 中添加业务规则,您可以混合数据结构和对象。

于 2013-04-12T05:14:57.833 回答