2010-11-18 1 views
0

У меня есть модель отчета, которую я использую в качестве основного контейнера для всех функций, которые извлекают различные данные отчета. Эта модель отчета имеет следующие функцииZend Framework Как мне получить доступ к различным классам таблиц из моего приложения Application_Model_Report?

protected $_dbTable; 

public function setDbTable($dbTable) 
{ 
    if (is_string($dbTable)) 
    { 
     $dbTable = new $dbTable(); 
    } 

    if (!$dbTable instanceof Zend_Db_Table_Abstract) 
    { 
     throw new Exception('Invalid table data gateway provided'); 
    } 
    $this->_dbTable = $dbTable; 
    return $this; 
} 

public function getDbTable($dbTable) 
{ 
    if (null === $this->_dbTable) 
    { 
     $this->setDbTable($dbTable); 
    } 
    return $this->_dbTable; 
} 

public function agentDailyCollections() 
{ 
    //$db = 
    $sql = $this->getDbTable('Application_Model_DbTable_Groupsloandetails'`enter code here`)->select() 
       ->setIntegrityCheck(false) 
       ->from(array('gl' => 'groups_loan_details'), array()) 
       ->join(array('ml' => 'members_loan_details'), 'gl.id = ml.groups_loan_details_id', 
         array('SUM(ml.daily_payment) AS GroupDailyPayment')) 
       ->join(array('m' => 'members'), 'ml.members_id = m.id', array('id AS ID', 'first_name AS MFirstName', 'surname AS MSurname')) 
       ->join(array('g' => 'groups'), 'gl.groups_id = g.id', array('group_name')) 
       ->join(array('u' => 'users'), 'gl.loan_officer = u.id', array('id AS OID', 'first_name', 'surname')) 
       ->where('gl.loan_end >=?', date(Y.'-'.m.'-'.d)) 
       ->where('gl.occur = ?', 'Active') 
       ->group('(u.id)') 
       ->group('(g.group_name)') 
       ->group('(m.id) WITH ROLLUP'); 

    return $this->getDbTable()->fetchAll($sql); 
} 

public function groupsWithMembers() 
{ 
    $sql = $this->getDbTable('Application_Model_DbTable_Members')->select() 
       ->setIntegrityCheck(false) 
       ->from(array('m' => 'members'), array()) 
       ->join(array('g' => 'groups'), 'm.groups_id = g.id') 
       ->group('(g.group_area_residence)') 
       ->group('(g.group_name) WITH ROLLUP'); 

    return $this->getDbTable()->fetchAll($sql); 
} 

В моей попытке иметь доступ к различным таблицам в соответствии с различными требованиями отчета, я передать имя требуемого класса таблицы к getDbTable функции ожидая его, чтобы получить объект стол для меня. Это своего рода работает, но тогда я получаю следующее сообщение об ошибке

Warning: Missing argument 1 for Application_Model_Report::getDbTable(), called in D:\www\gepm\application\models\Report.php on line 131 and defined in D:\www\gepm\application\models\Report.php on line 22`enter code here` 

Я знаю, что есть что-то в корне неправильно с тем, что я делаю, но не уверен, что. Нужна помощь, ребята, просто пытаясь обойти этот объект/объект zend framework. Благодарю.

+0

Какие линии 131 и 22? Я думаю, что 'ваш агентDailyCollections() вызывает проблемы здесь? – Fge

ответ

0

Я думаю, что вы пропустили значение по умолчанию для аргумента вашей функции, попробуйте изменить:

public function getDbTable($dbTable) 
{ 

с

public function getDbTable($dbTable = null) 
{ 
+0

благодарен за ответ. это и сделал трюк. однако мне будет интересно узнать, почему мне все еще нужно было установить значение по умолчанию, хотя я всегда буду передавать агитацию, и в этом случае я сделал – Napoleon

+0

. Я вижу, что вы не всегда передаете аргумент функции, см. 'return $ this- > getDbTable() -> fetchAll ($ SQL); '. Вы вызвали 'getDbTable()' без передачи каких-либо аргументов;) – subosito

+0

хорошо различимый символ – Napoleon

Смежные вопросы