nosat
(No Sat)
1
问题描述:
我用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文去了。
qiang
(Qiang Xue)
2
参考http://code.google.com/p/yii/source/browse/trunk/docs/guide/extension.integration.txt
最后一节
nosat
(No Sat)
3
谢谢强哥亲自指点~ 我去瞧瞧
我之前也尝试过:
$yii=dirname(__FILE__).'/../../../yii/framework/yii.php';
require_once($yii);
Yii::createWebApplication();
失败的原因可能是我把包含以上代码的文件放到了protected下,不过我也没传config文件,可能也不行
报的错误是:
nosat
(No Sat)
4
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: }
miles
(Cuiming2355 Cn)
5
或者可以考虑把你的采集程序写成yii console的形式,这样就可以调用到yii的所有资源了
nosat
(No Sat)
6
多谢指点,我去学习学习。
写成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里边哪里写过?
nosat
(No Sat)
8
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才支持。