Hi guys, this email will be a little long to explain my confusion, please
bear with me.
I am trying to create some domain logic in my result objects so I have
access to methods on rowsets and rows. It kinda works, but kinda doesn't.
Unfortunately I think I am either missing something completely, or what I'm
trying to do just isn't possible.
I am using the latest nightly build.
This all came from wanting to change this: $article =
$db->query($sql)->fetchObject(__CLASS__);
Here's my error:
Fatal error: Uncaught exception 'Zend_Db_Table_Row_Exception' with message
'Unrecognized method 'helloWorld()'' in
D:\_php\www\includes\Zend\Db\Table\Row\Abstract.php
Well, that's obvious - I'm trying to access a non-existent method.
However, here's some code. I hope that you'll be able to understand at a
glance what I'm trying to do. I have stripped out most of my un-needed code.
I can verify that the database has connected, and the view object does
exist.
class AccountsController extends BootstrapController
{
public function indexAction()
{
$accounts = new Accounts();
$this->view->accounts = $accounts->fetchAll();
Zend_Debug::dump($this->view->accounts); // debug
foreach($this->view->accounts as $account)
{
echo $account->helloWorld(); // This is the cause of our
problem
}
}
}
class Accounts extends Zend_Db_Table
{
public function _setup($config = array())
{
$this->_name = 'accounts';
$this->setRowClass('Account'); // this seems to be ignored
$this->setRowsetClass('AccountsRowset');
parent::_setup($config);
}
}
class AccountsRowset extends Zend_Db_Table_Rowset
{
public function _setup($config = array())
{
$this->_name = 'accounts';
$this->setRowClass('Account'); // this seems to be ignored
parent::_setup($config);
}
}
class Account extends Zend_Db_Table_Row
{
public function _setup($config = array())
{
$this->_name = 'accounts';
parent::_setup($config);
}
public function helloWorld()
{
return 'hello ' . $this->name;
}
}
Now. When I look at the dump(), I can see the data. The row class and rowset
class is being set. However, it is still calling Zend_Db_Table_Row. To aid
in debugging, here is my dump.
object(AccountsRowset)#20 (8) {
["_data:protected"] => array(2) {
[0] => array(7) {
["id"] => string(1) "1"
["date_entered"] => string(19) "2007-03-17 21:24:38"
["date_modified"] => NULL
["created_by"] => string(1) "1"
["assigned_user_id"] => NULL
["name"] => string(1) "d"
["deleted"] => NULL
}
[1] => array(7) {
["id"] => string(1) "2"
["date_entered"] => string(19) "2007-03-19 11:45:17"
["date_modified"] => NULL
["created_by"] => string(1) "1"
["assigned_user_id"] => NULL
["name"] => string(4) "dddd"
["deleted"] => NULL
}
}
["_table:protected"] => object(Accounts)#19 (8) {
["_db:protected"] => object(Zend_Db_Adapter_Pdo_Mysql)#12 (5) {
["_pdoType:protected"] => string(5) "mysql"
["_config:protected"] => array(6) {
["dbtype"] => string(9) "pdo_mysql"
["host"] => string(9) "localhost"
["username"] => string(4) "root"
["password"] => string(0) ""
["dbname"] => string(3) "crm"
["debugEnabled"] => string(4) "true"
}
["_fetchMode:protected"] => int(2)
["_profiler:protected"] => object(Zend_Db_Profiler)#14 (4) {
["_queryProfiles:protected"] => array(0) {
}
["_enabled:protected"] => bool(false)
["_filterElapsedSecs:protected"] => NULL
["_filterTypes:protected"] => NULL
}
["_connection:protected"] => object(PDO)#17 (0) {
}
}
["_name:protected"] => string(8) "Accounts"
["_cols:protected"] => array(7) {
[0] => string(2) "id"
[1] => string(12) "date_entered"
[2] => string(13) "date_modified"
[3] => string(10) "created_by"
[4] => string(16) "assigned_user_id"
[5] => string(4) "name"
[6] => string(7) "deleted"
}
["_primary:protected"] => string(2) "id"
["_rowClass:protected"] => string(7) "Account"
["_rowsetClass:protected"] => string(14) "AccountsRowset"
["_referenceMap:protected"] => array(0) {
}
["_dependentTables:protected"] => array(0) {
}
}
["_connected:protected"] => bool(true)
["_tableClass:protected"] => string(8) "Accounts"
["_rowClass:protected"] => string(17) "Zend_Db_Table_Row"
["_pointer:protected"] => int(0)
["_count:protected"] => int(2)
["_rows:protected"] => array(0) {
}
}
I'm hoping someone can help me out. I'm kinda at a loss.
-Ryan