Search code examples
zend-frameworkzend-dbzend-db-table

Trying to get property of non-object in Zend Framework 1.11 Application


I'm trying to create a table of information in a database query using Zend Framework 1.11, Zend_Db, and Zend_Db_Select.

Initially, I went about this by instantiating a new instance of my table and using $table->select().

However, when I went to JOIN it to another table, I got an error message that I wasn't able to JOIN using this select() method. After doing some research, I found that I had to call the select() method off of my default adapter if I wanted to do this JOIN. Seemed straightforward.

At this point, I have a model, a controller, and a view, but I think something is getting "lost in translation" between my Controller & my View.

Here is the model (inside Application_Model_DbTable_ActivityRequest):

public function getAllActivityRequests()
{

        $db = $this->getDefaultAdapter();
        $select = $db->select();

        $select->from('activityrequest');
        $select->where('isDeleted = ?','N');
        $select->where('ReqType <> ?','Purchase Product');
        $select->order('ReqTime DESC');

        $query = $select->query();
        $row = $query->fetchAll();

        return $row;
}

And the Controller (Admin Controller):

public function getWorkAction()
{

    $table = new Application_Model_DbTable_Activityrequest();

    $row = $table->getAllActivityRequests();

    $this->view->activityrequests = $row;

}

And (relevant part of)the View (admin/get-work):

<?php foreach($this->activityrequests as $activity): ?>
<tr>
    <td><?= $activity->CustomerID; ?></td>
    <td><?= $activity->ReqType; ?></td>
    <td><?= $activity->ReqTime; ?></td>
    <td><?= $activity->PickupTime; ?></td>
    <td><?= $activity->AddressID; ?></td>
    <td><?= $activity->Notes; ?></td>
    <td><?= $activity->HeardAbtUs; ?></td>
    <td><?= $activity->isDeleted; ?></td>
</tr>
<?php endforeach; ?>

When I do a var_dump of $row in both my model and my controller, I see the array that I'm trying to pass to the view. As soon as I get to the view, though, I get this error on a "non-object."

Any help would be appreciated.

Thanks!


Solution

  • You need to set your adapter / select / dbTable fetch mode.

    See http://framework.zend.com/manual/en/zend.db.adapter.html#zend.db.adapter.select.fetch-mode

    Alternatively, use the Zend_Db_Table to full advantage

    public function getAllActivityRequests()
    {
        return $this->fetchAll(
            $this->select()
                ->where('isDeleted = ?', 'N')
                ->where('ReqType <> ?', 'Purchase Product')
                ->order('ReqTime DESC')
        );
    }
    

    See http://framework.zend.com/manual/en/zend.db.table.html#zend.db.table.fetch-all.select