За последние 24 часа нас посетили 22910 программистов и 1227 роботов. Сейчас ищет 741 программист ...

find() и findAll() возвращают NULL

Тема в разделе "Yii", создана пользователем olyahaandro, 21 мар 2019.

  1. olyahaandro

    olyahaandro Новичок

    С нами с:
    21 мар 2019
    Сообщения:
    15
    Симпатии:
    0
    Вечер добрый. Есть следующая строка в контроллере для view таблицы из бд:
    PHP:
    1.  $query = Standart::findAll();
    Возвращается значение NULL, даже для обычной таблицы. База данных postgresql. Соединение есть, все работает, пыталась задать явно find следующим образом:
    PHP:
    1. $sql = "SELECT * FROM public.\"Standart\"";
    2. $command = Yii::app()->db->createCommand($sql);
    3. $query = $command->queryAll();
    ...Но все равно выходит злосчастный NULL. В чем может заключаться проблема? Извините за скорее всего глупый вопрос, я действительно нуб, но найти ответ у меня так не получилось по прошествии уже суток. Буду рада любым советам, заранее спасибо.
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Второй код - практически прямой запрос через PDO, так что скорее всего что-то с синтаксисом SQL. С Postgresql не работаю, так что точнее сказать не могу.
     
  3. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Запрос валидный. Тут либо Yii его как-то переиначивает (к примеру, меняет кавычки на mysql-like ` или одинарные), либо что-то не так с конфигурацией: выбран не тот драйвер, у юзера нет доступа к БД и т.д.

    Почему возвращает null? Я просто с yii толком не работал, но all(), очевидно, должен отвечать пустой коллекцией. Может это какое-то хитрое подавление ошибок?
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    @romach, вообще, меня NULL тоже удивил, поскольку при невалидном запросе должно было быть исключение, а при валидном - вернуться массив. У меня-то с Yii большой довольно опыт.

    @olyahaandro, если бы случилось со мной такое, я бы полез отладчиком внутрь Yii. Хотя, похоже, твоя проблема в том, что ты рано к фреймворкам пришла. Когда я делал первый проект на фреймворке, я уже достаточно знал PHP, чтоб отчитывать код фреймворка при надобности.
    --- Добавлено ---
    Ну вообще, сообщество должно бы заметить такое, Postgress же популярный достаточно.
     
  5. olyahaandro

    olyahaandro Новичок

    С нами с:
    21 мар 2019
    Сообщения:
    15
    Симпатии:
    0
    Есть ощущение, что запрос к серверу вообще не проходит. Отключила сервер бд и результат такой же. Запрос переиначила следующим, более логичным образом:

    PHP:
    1. $sql = "SELECT * FROM public.\"Standart\"";
    2.         $command = pg_query($sql) or die('Ошибка запроса: ' . pg_last_error());
    3.         $query = pg_fetch_array($command, null, PGSQL_ASSOC)
    Но, похоже, что дело вовсе не в запросе. Причем yii2 видит таблицы и колонки, я заходила через генератор моделей, код модели формируется правильно.
    Вы правы, но обстоятельства обязывают, поэтому приходится во всем с нуля разбираться.
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    И что, через pg_query тоже не пашет этот запрос, или только через Yii2? У Yii2 PDO под куполом
     
  7. olyahaandro

    olyahaandro Новичок

    С нами с:
    21 мар 2019
    Сообщения:
    15
    Симпатии:
    0
    Да, через pg_query тоже выдает null
     
  8. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Попробуй тащить данные через модель:
    PHP:
    1. <?php
    2.  
    3. namespace app\models;
    4.  
    5. use Yii;
    6. use yii\db\ActiveRecord;
    7. use yii\db\Query;
    8.  
    9. class ModelOlyahaandro extends ActiveRecord{
    10.      
    11.         public function getStandart(){
    12.                $query = new Query;              
    13.                $query->from('public');              
    14.                $result = $query->all();
    15.                if(count($result) > 0){
    16.                       return $result;
    17.                }
    18.         }
    19. }
    И обратись к этой функции в контроллере:
    PHP:
    1. <?php
    2. namespace app\controllers;
    3.  
    4. use Yii;
    5. use yii\web\Controller;
    6. use app\models\ModelOlyahaandro;
    7.  
    8. class OlyahaandroController extends Controller{
    9.        
    10.          public function actionIndex(){
    11.                    
    12.              $name = ModelOlyahaandro::getStandart();
    13.              
    14.          }
    15. }
     
  9. olyahaandro

    olyahaandro Новичок

    С нами с:
    21 мар 2019
    Сообщения:
    15
    Симпатии:
    0
    Не сработало, но спасибо за попытку. Копаю дальше.
     
  10. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    @olyahaandro, нет смысла пробовать что-то с фреймворком, если без фреймворка тоже не получается выполнить запрос. Ищи в этом направлении. Попробуй напрямую через PDO, Yii2 использует именно PDO для работы с сервером БД
    --- Добавлено ---
    Поставь в стандартном PDO режим исключений, и лови их, посмотри, может появится какой-то мат, и будет хорошая подсказка. В принципе, функции с all в Yii2 действительно должны возвращать именно массивы, у меня ни разу не было ситуации, чтоб вернулся null. Или возвращался массив или кидалось исключение. Настройки ошибок PHP тоже не помешает проверить.
     
  11. olyahaandro

    olyahaandro Новичок

    С нами с:
    21 мар 2019
    Сообщения:
    15
    Симпатии:
    0
    Проблема явно в самом подключении, оно работает как-то непредсказуемо. pg_hba.conf проверила, там все ок, смущает другое, но это вопрос другого топика, этот нужно закрыть, потому что проблема действительно никак не связана с функцией и yii2.
     
  12. muzmmuz

    muzmmuz Новичок

    С нами с:
    8 апр 2019
    Сообщения:
    41
    Симпатии:
    1
    Адрес:
    Россия, Москва
    А конфиги смотрели? Мб там неверно указано, поэтому и по нулям выдает