I want to use the database access objects to access a table in my database instead of doing active record since that takes a long time to load. if I use database access objets instead (calling createCommand, query, execute, etc), do i still need to create a model class for the table? if so what would be the parent class of this model class? My goal is to access/edit the table values using yii database access objects. I'm using YII FRAMEWORK. Or is it best to use a component? If so, when do you usually have to use components? I don't understand what components are for....
3 Answers
No, you can create a generic class which has a member property of a CDbConnection. For that matter, you can just use CDbConnection, but you might end up creating a lot of connections that way.
class Foo
{
private $conn;
function __construct(){ $this->conn =
new CDbConnection($dsn,$username,$password); }
function runQuery($sql) {
$command=$connection->createCommand($sqlStatement);
return $command->query();
}
}
1 Comment
If you have your database settings in your config/main.php file, you can also do:
$command = Yii::app()->db->createCommand($sql);
$result = $command->queryAll();
and if you need to reset the command:
$command = false;
If you create a custom class, you don't need to reference a Model or extend an existing class, your connection will use CDbConnection (by using the method above or calling it directly in your connection statement).
this page has pretty clear info on Yii's DAO.
As far as components go, they can mean different things - there are Yii's "core components", which are things like urlManager, user, db, etc. and can have their default properties set in the config/main.php file. Then there is the "components" directory which can be configured to autoload classes and "contains components (e.g. helpers, widgets) that are only used by this application." So you can put custom classes in there that you want available throughout your app.