Запрос к базе данных в стиле CakePHP приводит к Zend Framework с использованием Zend_Db_Table?

Если у вас есть сложный 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);

person BeesonBison    schedule 09.01.2012    source источник
comment
Как человек, который также перешел от работы с Cake к работе с ZF, я чувствую вашу боль и хотел бы увидеть ответы, которые вы получите.   -  person Dunhamzzz    schedule 09.01.2012
comment
Ну, это, конечно, не из-за выбора, я могу вам многое сказать. Наследование кода, какое удовольствие. Посмотрим, получим ли мы какую-либо обратную связь. Это примерно так же близко, как я видел до сих пор: zend-framework/" rel="nofollow noreferrer">mattmccormick.ca/2010/04/24/   -  person BeesonBison    schedule 09.01.2012
comment
Я думаю, что со скоростью, с которой я работаю с Zend Framework, я буду прибегать к использованию решений на основе запросов SQL, таких как MySQL GROUP_CONCAT stackoverflow.com/questions/2358300/   -  person BeesonBison    schedule 09.01.2012
comment
Существует также этот обходной путь на основе SQL (хотя он и близко не отвечает на вопрос с точки зрения ZF) для LEFT JOINS и MySQL GROUP_CONCAT: stackoverflow.com/questions/4455958/   -  person BeesonBison    schedule 09.01.2012


Ответы (1)


Ничего более красивого, чем то, к чему ты привык, просто данные, которые я просил. Обычный результат должен быть объектом набора строк, однако ->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);

простите, просто полезность :)

person RockyFord    schedule 15.01.2012