Запрос Zend Framework с объединениями

Я пытаюсь воспроизвести этот запрос с помощью Zend Framework:

SELECT 
    activitytype.description, 
    activity.datecompleted

FROM
    clientactivity
INNER JOIN activity
    ON activity.activityID = clientactivity.activityid
INNER JOIN activitytype
    ON activitytype.activitytypeid = activity.activitytypeid

WHERE
    clientactivity.clientid = 100

Это то, что у меня есть до сих пор:

$select = $dbTable->select(Zend_Db_Table::SELECT_WITH_FROM_PART);

$select->setIntegrityCheck(false);
$select->where('clientactivity.clientid = ?', $clientID);

$select->join('activity', 'activity.activityid = clientactivity.activityid');
$select->join('activitytype', 'activitytype.activitytypeid = activity.activitytypeid');

$select->columns(array('activitytype.description', 'activity.datecompleted'));

Кажется, у меня проблемы с опцией столбцов, похоже, что они не ограничивают столбцы, и я получаю clientactivity.* и т. д. в списке столбцов в запросе.

Что я делаю неправильно?

Спасибо, Мартин


person Martin    schedule 13.11.2010    source источник


Ответы (1)


Попробуйте вместо $select->columns();

$select->from('activitytype.description', 'activity.datecompleted');

Справочник — http://framework.zend.com/manual/en/zend.db.select.html

ОБНОВЛЕНИЕ:

Этот пример делает нас общим обработчиком базы данных:

$db = Zend_Db::factory('Pdo_Mysql', array(
            'host'     => '127.0.0.1',
            'username' => 'yourusername',
            'password' => 'somepassword',
            'dbname'   => 'yourdbname'
        ));

 $select = $db->select(Zend_Db_Table::SELECT_WITH_FROM_PART);
 $select->from('tableName','fieldName')
         ->join('joinTable', 'joinTable.keyId = tableName.keyId',array())
         ->where('tableName.userId = ?', $userId);

 $resultSet = $db->fetchAll($select);

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

person simnom    schedule 13.11.2010
comment
Боюсь, это не поможет, сначала выдает ошибку, когда я делаю поля массивом и добавляю null в качестве имени таблицы, я получаю поля в списке, но все еще имею клиентскую активность. * и т. д. Спасибо. - person Martin; 13.11.2010
comment
Привет! Вы используете Zend_Db_Table для создания $select? Думаю, это повлияет на результаты, если активность клиента включена по умолчанию. Я обновлю ответ рабочим фрагментом кода, который я только что создал с помощью Zend_Db_Select. - person simnom; 13.11.2010
comment
Вот так, спасибо!! Я предполагаю, что вы не можете делать такие вещи при использовании Zend_Db_Table. - person Martin; 13.11.2010
comment
@Martin Поскольку Zend_Db_Table представляет физическую таблицу БД в ООП, и вы не выбираете какие-либо столбцы из этой таблицы, на самом деле это не тот случай, когда вы не можете, скорее, вы не должны этого делать. - person Phil; 15.11.2010
comment
@Шимнон: привет! твой маленький пустой массив() спас меня!! - person Alexar; 21.12.2010