php
  • pagination
  • yii2
  • 2014-12-29 4 views 2 likes 
    2

    Я пытаюсь сделать pagination выполнимым в моем веб-приложении. Но, похоже, не дает мне правильного номера для свойств totalCount. Мой кодYii 2 pagination не работает должным образом

    это-
    $find_query = "SELECT * FROM business WHERE status='Enabled' "; 
    
        $query = Business::findBySql($find_query); 
    
        //$query = Business::find()->where(['status' => 'Enabled']); 
    
        $countQuery = clone $query; 
    
        $pages = new Pagination(['totalCount' => $countQuery->count(), 'defaultPageSize' => 10]); 
    
        $data_rows = $query->offset($pages->offset) 
          ->limit($pages->limit) 
          ->all(); 
    

    Из выше коды, если я использую объект с findBySql(), то это дает мне нужное количество строк, но тогда количество строк не соответствует с $ pages-> значением TOTALCOUNT. totalCount дает мне другое число, отличное от номера строки результата.

    Если используется комментированный объект с помощью find(), то он дает мне то же число строк для $ pages-> totalCount и $ data_rows.

    Что мне нужно обновить здесь, чтобы убедиться, что findBySql() работает должным образом?

    Мне нужно использовать findBySql(), потому что мой SQL немного сложный, который содержит несколько операций объединения.

    Заранее спасибо ..

    ответ

    2

    Try, чтобы получить totatCount как этот

    $find_query = "SELECT * FROM business WHERE status='Enabled' "; 
    
    $query = Business::findBySql($find_query); 
    
    //$query = Business::find()->where(['status' => 'Enabled']); 
    
    $countQuery = count($query->all()); 
    
    $pages = new Pagination(['totalCount' => $countQuery, 'defaultPageSize' => 10]); 
    
    $data_rows = $query->offset($pages->offset) 
         ->limit($pages->limit) 
         ->all(); 
    
    +1

    Спасибо. Да, я уже так пробовал. Но мой вопрос в том, почему totalCount не дает мне правильное число из $ pages = new Pagination (['totalCount' => $ countQuery-> count(), 'defaultPageSize' => 10]); – user3273871

    +0

    @ user3273871 Я отредактировал мой ответ –

    +0

    Pagination не работает с использованием $ query = Business :: findBySql ($ find_query); – user3273871

    1

    От the forum:

    Обратите внимание, что из-за уже указанный оператор SQL, вызов методов модификации дополнительного запроса (например, где(), order()) на созданном экземпляре yii \ db \ ActiveQuery не будет иметь никакого эффекта.

    Попробуйте использовать Yii::$app->db->createCommand()

    0

    Поскольку вы указали в инструкции SQL, вызов offset, limit не будет работать. Поэтому создавайте запрос с помощью построителей запросов. Должно работать

    $query = Business::find()->where(['status' => 'Enabled']); 
    
    $pages = new Pagination(['totalCount' => $query->count(), 'defaultPageSize' => 10]); 
    
    $data_rows = $query->offset($pages->offset) 
         ->limit($pages->limit) 
         ->all(); 
    

     Смежные вопросы

    • Нет связанных вопросов^_^