求指点!怎么把采集来的数据用Yii的model入库?

问题描述:

我用php写了一个小的采集程序,数据采集完了,想把这个采集模块放入到Yii里,用Yii的model进行入库,可是不知道怎么做

step1:

我直接把model类文件引进来

require_once(’../protected/models/Info.php’);

可是报错了

Fatal error: Class ‘CActiveRecord’ not found in D:\www\blog\protected\models\Info.php on line 14

我就是想在自己写的采集模块里边用Yii的CRUD,不知道该怎么做?求高手指点~

step2:

然后我又把yii/framework/yii.php

require_once 进来

再次报错

Fatal error: Call to a member function getDb() on a non-object in D:\www\yii\framework\db\ar\CActiveRecord.php on line 589

我打开CActiveRecord.php on line 589

589 line self::$db=Yii::app()->getDb();

貌似只能是CWebApplication才能用CApplication里的getDb()方法啊

也就是说我自己写的独立的采集模块没办法用Yii的model进行CRUD吗?求高手指点~

step3:

尝试不用ar,$command = Yii::app()->createCommand();还是报和上面类似的错误,其实主要是因为Yii::app(),因为采集模块是独立的,并没有生成应用实例,再继续调查,实在没辙只能自己写SQL文去了。

参考http://code.google.com/p/yii/source/browse/trunk/docs/guide/extension.integration.txt

最后一节

谢谢强哥亲自指点~ 我去瞧瞧

我之前也尝试过:




$yii=dirname(__FILE__).'/../../../yii/framework/yii.php';

require_once($yii);

Yii::createWebApplication();



失败的原因可能是我把包含以上代码的文件放到了protected下,不过我也没传config文件,可能也不行

报的错误是:

step4:

眼泪哗哗的~

用了强哥指点的方法成功了。

还有一个问题:

现在教程中的Query Builder




$user = Yii::app()->db->createCommand()

    ->select('id, username, profile')

    ->from('tbl_user u')

    ->join('tbl_profile p', 'u.id=p.user_id')

    ->where('id=:id', array(':id'=>$id))

    ->queryRow();



现在还行得通吗?createCommand()不传参数可以吗?

为什么我这样用会报错呢?

PHP Error

描述

Missing argument 1 for CDbConnection::createCommand(), called in D:\www\fanybook\index.php on line 14 and defined

源文件

D:\www\yii\framework\db\CDbConnection.php(351)

00351: public function createCommand($sql)

00352: {

00353: if($this->getActive())

00354: return new CDbCommand($this,$sql);

00355: else

00356: throw new CDbException(Yii::t(‘yii’,‘CDbConnection is inactive and cannot perform any DB operations.’));

00357: }

或者可以考虑把你的采集程序写成yii console的形式,这样就可以调用到yii的所有资源了

多谢指点,我去学习学习。

写成yii console的形式,就可以这样写了吗?




$user = Yii::app()->db->createCommand()

    ->select('id, username, profile')

    ->from('tbl_user u')

    ->join('tbl_profile p', 'u.id=p.user_id')

    ->where('id=:id', array(':id'=>$id))

    ->queryRow();



不用给createCommand()传参数?

还是说doc里的用法createCommand()已经过期了,不能再这样用了。

写成yii console的形式,有没有参照的例子?例如doc里边哪里写过?

两种都可以。建议你完整阅读整个数据库章节。

Starting from version 1.1.6, CDbCommand can also be used as a query builder that builds a SQL statement from code fragments. For example,




$user = Yii::app()->db->createCommand()

    ->select('username, password')

    ->from('tbl_user')

    ->where('id=:id', array(':id'=>1))

    ->queryRow();



晕,看了CDbCommand的介绍才知道,1.1.6才支持这样写,我说我怎么报错呢,因为我用的1.1.5

现在我已经把框架升级到了1.1.6,已经okay了,谢谢强哥和miles兄弟的指点,希望我的问题也能对其他兄弟有所帮助吧。

ps:我之前看的是http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.query-builder

其中并没写1.1.6才支持。