Результаты запроса к базе данных в стиле CakePHP в Zend Framework с использованием Zend_Db_Table? - PullRequest
1 голос
/ 09 января 2012

Если у вас сложный SQL-запрос, включающий много объединений (например, возвращающий Статьи с их связанными многими ко многим тегам), есть ли в Zend Framework что-нибудь, что даст прекрасные результаты для базы данных в стиле CakePHP:

Array
(
    [0] => Array
        (
            [ModelName] => Array
                (
                    [id] => 83
                    [field1] => value1
                    [field2] => value2
                    [field3] => value3
                )

            [AssociatedModelName] => Array
                (
                    [id] => 1
                    [field1] => value1
                    [field2] => value2
                    [field3] => value3
                )

        )
)

Я не возражаю, если это объект, а не массив, мне просто интересно, если бы с помощью Zend_Db_Table для построения запроса SELECT JOIN я мог бы сэкономить некоторую работу и получить некоторые красиво отформатированные результаты.

Вотвид кода, который я использую для построения запроса:

$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);

1 Ответ

1 голос
/ 15 января 2012

Ничто так красиво, как вы привыкли только к данным, которые я просил.Нормальным результатом будет объект набора строк, однако -> toArray () доступно для большинства методов * Zend_DbTable_Abstract *.

Результат $ result-> toArray () усеченный и выгруженный с помощью Zend_debug :: dump ():

Lead Tracks array(7) {
  [0] => array(9) {
    ["trackid"] => string(2) "24"
    ["weekendid"] => string(1) "8"
    ["shiftid"] => string(1) "1"
    ["bidlocationid"] => string(1) "1"
    ["qty"] => string(1) "2"
    ["lead"] => string(1) "1"
    ["bidloc"] => string(14) "out of service"
    ["deptcode"] => string(3) "491"
    ["stationid"] => string(1) "1"
}

Запрос:

where = $this->select(Zend_Db_Table::SELECT_WITH_FROM_PART)
                     ->setIntegrityCheck(FALSE);
    $where->where('track.bidlocationid = ?', $bidlocationId)
          ->where('lead = ?', $lead)
          ->join('bidlocation', 'bidlocation.bidlocationid = track.bidlocationid')
          ->where('bidlocation.stationid = ?', $stationId)
          ->order('shiftid ASC')
          ->order('weekendid ASC');

    $result = $this->fetchAll($where);

извините, просто утилита:)

...