Почему CakePHP оборачивает базу данных так часто в подмассивы? - PullRequest
1 голос
/ 25 июля 2011

CakePHP имеет раздражающую привычку иметь очень глубокие многомерные массивы при извлечении данных из базы данных.

Например, я просто хотел получить количество строк, возвращенных предыдущим запросом, используя SQL_CALC_FOUND_ROWS и «SELECT».FOUND_ROWS () как row_count ".Результатом было три массива: $ result [0] [0] ['row_count'].

Ответы [ 3 ]

5 голосов
/ 25 июля 2011

Вы можете использовать $this->Model->find('count'); http://book.cakephp.org/view/1020/find-count? или переписать запрос как "select FOUND_ROWS() as TableName.row_count from tablename TableName"

2 голосов
/ 25 июля 2011

ну, во-первых, вы используете пользовательский запрос, и торт должен позаботиться о всех возможных случаях возвращаемых данных (он не знает, что возвращаемые данные будут равны 1 значению). Например, массив $ result, я думаю, самый внешний массив предназначен для случаев, когда возвращаемые данные представляют собой несколько записей.

Так что да, это так, потому что он выполняет определенные шаги для преобразования результата БД в переменную PHP. И это лучше для согласованности всей структуры. Это, конечно, раздражает в таких случаях, как ваш, но вы всегда можете определить пользовательскую функцию query () в app_model для интеллектуального удаления массивов, если есть одно возвращаемое значение.

2 голосов
/ 25 июля 2011

Это довольно хороший вопрос!Я не уверен, почему CakePHP делает это и сам удивлялся тому же самому.Я только вкопался в «внутренности» Cake и не углублялся в этот аспект фреймворка.

Если бы я рискнул ...

Это побочный эффект ORM от Cake.ORM, который поставляется с Cake, по крайней мере , на мой взгляд , довольно приятен и позволяет вам делать очень сложные запросы практически без исходного SQL или без него.Я уверен, что это одна из причин популярности Cake.Он превращает сложные операторы SQL в относительно простую структуру многомерного массива как при создании запроса, так и при возврате данных.

Еще один аспект Cake, который может повлиять на это, - это их «соглашение оконфигурация "философия.Я уверен, что на стороне разработки проще вернуть ту же самую общую структуру массива, а не пытаться оптимизировать для необработанного SQL.Рискну поспорить, что большинство запросов Cake производятся через ORM, а не необработанные запросы, написанные разработчиком.Оптимизация для них может не иметь смысла с точки зрения разработки.

Опять же, это всего лишь моя несколько образованная догадка .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...