Вечер добрый. Есть следующая строка в контроллере для view таблицы из бд: PHP: $query = Standart::findAll(); Возвращается значение NULL, даже для обычной таблицы. База данных postgresql. Соединение есть, все работает, пыталась задать явно find следующим образом: PHP: $sql = "SELECT * FROM public.\"Standart\""; $command = Yii::app()->db->createCommand($sql); $query = $command->queryAll(); ...Но все равно выходит злосчастный NULL. В чем может заключаться проблема? Извините за скорее всего глупый вопрос, я действительно нуб, но найти ответ у меня так не получилось по прошествии уже суток. Буду рада любым советам, заранее спасибо.
Второй код - практически прямой запрос через PDO, так что скорее всего что-то с синтаксисом SQL. С Postgresql не работаю, так что точнее сказать не могу.
Запрос валидный. Тут либо Yii его как-то переиначивает (к примеру, меняет кавычки на mysql-like ` или одинарные), либо что-то не так с конфигурацией: выбран не тот драйвер, у юзера нет доступа к БД и т.д. Почему возвращает null? Я просто с yii толком не работал, но all(), очевидно, должен отвечать пустой коллекцией. Может это какое-то хитрое подавление ошибок?
@romach, вообще, меня NULL тоже удивил, поскольку при невалидном запросе должно было быть исключение, а при валидном - вернуться массив. У меня-то с Yii большой довольно опыт. @olyahaandro, если бы случилось со мной такое, я бы полез отладчиком внутрь Yii. Хотя, похоже, твоя проблема в том, что ты рано к фреймворкам пришла. Когда я делал первый проект на фреймворке, я уже достаточно знал PHP, чтоб отчитывать код фреймворка при надобности. --- Добавлено --- Ну вообще, сообщество должно бы заметить такое, Postgress же популярный достаточно.
Есть ощущение, что запрос к серверу вообще не проходит. Отключила сервер бд и результат такой же. Запрос переиначила следующим, более логичным образом: PHP: $sql = "SELECT * FROM public.\"Standart\""; $command = pg_query($sql) or die('Ошибка запроса: ' . pg_last_error()); $query = pg_fetch_array($command, null, PGSQL_ASSOC) Но, похоже, что дело вовсе не в запросе. Причем yii2 видит таблицы и колонки, я заходила через генератор моделей, код модели формируется правильно. Вы правы, но обстоятельства обязывают, поэтому приходится во всем с нуля разбираться.
Попробуй тащить данные через модель: PHP: <?php namespace app\models; use Yii; use yii\db\ActiveRecord; use yii\db\Query; class ModelOlyahaandro extends ActiveRecord{ public function getStandart(){ $query = new Query; $query->from('public'); $result = $query->all(); if(count($result) > 0){ return $result; } } } И обратись к этой функции в контроллере: PHP: <?php namespace app\controllers; use Yii; use yii\web\Controller; use app\models\ModelOlyahaandro; class OlyahaandroController extends Controller{ public function actionIndex(){ $name = ModelOlyahaandro::getStandart(); } }
@olyahaandro, нет смысла пробовать что-то с фреймворком, если без фреймворка тоже не получается выполнить запрос. Ищи в этом направлении. Попробуй напрямую через PDO, Yii2 использует именно PDO для работы с сервером БД --- Добавлено --- Поставь в стандартном PDO режим исключений, и лови их, посмотри, может появится какой-то мат, и будет хорошая подсказка. В принципе, функции с all в Yii2 действительно должны возвращать именно массивы, у меня ни разу не было ситуации, чтоб вернулся null. Или возвращался массив или кидалось исключение. Настройки ошибок PHP тоже не помешает проверить.
Проблема явно в самом подключении, оно работает как-то непредсказуемо. pg_hba.conf проверила, там все ок, смущает другое, но это вопрос другого топика, этот нужно закрыть, потому что проблема действительно никак не связана с функцией и yii2.