[OK] findBySql($sql) ошибка

Уже исправленные репорты или принятые предложения
Ответить
Vespertilio
Сообщения: 271
Зарегистрирован: 2012.11.30, 07:33

[OK] findBySql($sql) ошибка

Сообщение Vespertilio »

Здравствуйте, есть тут в доках пример:https://github.com/yiisoft/yii2/blob/ma ... e-database
в частности такое:

Код: Выделить всё

// to retrieve customers using a raw SQL statement:
$sql = 'SELECT * FROM tbl_customer';
$customers = Customer::findBySql($sql)->all(); 
и тут у меня выбивала ошибка:
Invalid Configuration – yii\base\InvalidConfigException

The "query" property must be an instance of a class that implements the QueryInterface e.g. yii\db\Query or its subclasses.
Собственно почему? просто Model::find() работает.
Я сделал так:

Код: Выделить всё

$query = Ad::find()
    ->orderBy('paid ASC, time_stamp DESC');
Но всеравно хотелось бы решить проблему с findBySql.

Ну и в догонку =)

Как правильно описать такой запрос:

Код: Выделить всё

SELECT tbl_ad.* FROM `tbl_ad`,`tbl_user` WHERE (tbl_ad.user_id=tbl_user.id) AND tbl_user.id='2' 
У меня есть модели User, есть Ad. Может через AR.. Сложные запросы через AR пока не получаються у меня :D
Vespertilio
Сообщения: 271
Зарегистрирован: 2012.11.30, 07:33

Re: findBySql($sql) ошибка

Сообщение Vespertilio »

Сделал так:

Код: Выделить всё

        $query = (new \yii\db\Query())
            ->select('tbl_ad.*')
            ->from(['tbl_user','tbl_ad'])
            ->where('(tbl_ad.user_id=tbl_user.id) AND tbl_user.id=2')
            ->limit(10);

            // Create a command. You can get the actual SQL using $command->sql
            $command = $query->createCommand();

            // Execute the command:
            $rows = $command->queryAll();
Но вопрос с findBySql($sql) еще открыт =)
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: findBySql($sql) ошибка

Сообщение samdark »

А можно сюда запостить ошибку вместе с трейсом?
Vespertilio
Сообщения: 271
Зарегистрирован: 2012.11.30, 07:33

Re: findBySql($sql) ошибка

Сообщение Vespertilio »

Sam Dark писал(а):А можно сюда запостить ошибку вместе с трейсом?
Конечно. Вот лог:

Код: Выделить всё

2014/03/09 22:30:50 [127.0.0.1] [error] [yii\base\InvalidConfigException] exception 'yii\base\InvalidConfigException' with message 'The "query" property must be an instance of a class that implements the QueryInterface e.g. yii\db\Query or its subclasses.' in D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\data\ActiveDataProvider.php:101
Stack trace:
#0 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\data\BaseDataProvider.php(79): yii\data\ActiveDataProvider->prepareModels()
#1 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\widgets\BaseListView.php(92): yii\data\BaseDataProvider->prepare()
#2 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\Object.php(49): yii\widgets\BaseListView->init()
#3 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\BaseYii.php(383): yii\base\Object->__construct(Array)
#4 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\Widget.php(89): yii\BaseYii::createObject(Array)
#5 D:\OpenServer\domains\kilo.dev\advanced\frontend\views\ad\_index_loop.php(18): yii\base\Widget::widget(Array)
#6 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\View.php(292): require('D:\OpenServer\d...')
#7 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\View.php(232): yii\base\View->renderPhpFile('D:\OpenServer\d...', Array)
#8 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\View.php(135): yii\base\View->renderFile('D:\OpenServer\d...', Array, NULL)
#9 D:\OpenServer\domains\kilo.dev\advanced\frontend\views\ad\list3.php(27): yii\base\View->render('_index_loop', Array)
#10 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\View.php(292): require('D:\OpenServer\d...')
#11 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\View.php(232): yii\base\View->renderPhpFile('D:\OpenServer\d...', Array)
#12 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\View.php(135): yii\base\View->renderFile('D:\OpenServer\d...', Array, Object(frontend\controllers\AdController))
#13 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\Controller.php(307): yii\base\View->render('list3', Array, Object(frontend\controllers\AdController))
#14 D:\OpenServer\domains\kilo.dev\advanced\frontend\controllers\AdController.php(132): yii\base\Controller->render('list3', Array)
#15 [internal function]: frontend\controllers\AdController->actionList3()
#16 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\InlineAction.php(53): call_user_func_array(Array, Array)
#17 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\Controller.php(130): yii\base\InlineAction->runWithParams(Array)
#18 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\Module.php(585): yii\base\Controller->runAction('list3', Array)
#19 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\web\Application.php(77): yii\base\Module->runAction('ad/list3', Array)
#20 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\Application.php(289): yii\web\Application->handleRequest(Object(yii\web\Request))
#21 D:\OpenServer\domains\kilo.dev\advanced\frontend\web\index.php(14): yii\base\Application->run()
#22 {main}2014/03/09 22:30:49 [127.0.0.1] [info] [application] $_COOKIE = array (
  '_csrf' => '58a0d28fd2fdce197c71152b6708fc2d38d9db39aabfec058605599f019e2ba4s:40:"a7a75857157bc2a97e3caacd33e78b116f669398";',
  'PHPSESSID' => '9027sda9jmnemp9kb76q9l8ck1',
)

$_SERVER = array (
  'REDIRECT_STATUS' => '200',
  'HTTP_HOST' => 'kilo.dev',
  'HTTP_CONNECTION' => 'keep-alive',
  'HTTP_CACHE_CONTROL' => 'max-age=0',
  'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  'HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36',
  'HTTP_ACCEPT_ENCODING' => 'gzip,deflate,sdch',
  'HTTP_ACCEPT_LANGUAGE' => 'ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4',
  'HTTP_COOKIE' => '_csrf=58a0d28fd2fdce197c71152b6708fc2d38d9db39aabfec058605599f019e2ba4s%3A40%3A%22a7a75857157bc2a97e3caacd33e78b116f669398%22%3B; PHPSESSID=9027sda9jmnemp9kb76q9l8ck1',
  'PATH' => 'D:\\OpenServer\\modules\\php\\PHP-5.4.20\\ext;D:\\OpenServer\\modules\\imagemagick;D:\\OpenServer\\modules\\php\\PHP-5.4.20;D:\\OpenServer\\modules\\database\\MySQL-5.5.34\\bin;D:\\OpenServer\\modules\\http\\Apache-2.2.25\\bin;D:\\OpenServer\\modules\\http\\Apache-2.2.25;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\system32\\Wbem;C:\\WINDOWS\\SysWOW64',
  'SystemRoot' => 'C:\\WINDOWS',
  'COMSPEC' => 'C:\\WINDOWS\\system32\\cmd.exe',
  'PATHEXT' => '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC',
  'WINDIR' => 'C:\\WINDOWS',
  'SERVER_SIGNATURE' => '',
  'SERVER_SOFTWARE' => 'Apache',
  'SERVER_NAME' => 'kilo.dev',
  'SERVER_ADDR' => '127.0.0.1',
  'SERVER_PORT' => '80',
  'REMOTE_ADDR' => '127.0.0.1',
  'DOCUMENT_ROOT' => 'D:/OpenServer/domains/kilo.dev/advanced/frontend/web',
  'SERVER_ADMIN' => '[no address given]',
  'SCRIPT_FILENAME' => 'D:/OpenServer/domains/kilo.dev/advanced/frontend/web/index.php',
  'REMOTE_PORT' => '53472',
  'REDIRECT_URL' => '/ad/list3',
  'GATEWAY_INTERFACE' => 'CGI/1.1',
  'SERVER_PROTOCOL' => 'HTTP/1.1',
  'REQUEST_METHOD' => 'GET',
  'QUERY_STRING' => '',
  'REQUEST_URI' => '/ad/list3',
  'SCRIPT_NAME' => '/index.php',
  'PHP_SELF' => '/index.php',
  'REQUEST_TIME_FLOAT' => 1394389849.203,
  'REQUEST_TIME' => 1394389849,
  'argv' => 
  array (
  ),
  'argc' => 0,
)
Из дебагера:

Код: Выделить всё

Time    Level    Category    Message
22:30:49.222    trace    yii\base\Module::getModule    
Loading module: debug
22:30:49.231    trace    yii\web\UrlManager::parseRequest    
No matching URL rules. Using default URL parsing logic.
22:30:49.231    trace    yii\web\Application::handleRequest    
Route requested: 'ad/list3'
22:30:49.234    trace    yii\base\Controller::runAction    
Route to run: ad/list3
22:30:49.237    trace    yii\base\InlineAction::runWithParams    
Running action: frontend\controllers\AdController::actionList3()
22:30:49.247    trace    yii\db\Connection::open    
Opening DB connection: mysql:host=localhost;dbname=kilo_yii2
D:\OpenServer\domains\kilo.dev\advanced\frontend\controllers\AdController.php(122)
22:30:50.275    info    yii\db\Command::queryInternal    
SELECT * FROM `tbl_ad` ORDER BY `time_stamp` ASC, `paid` ASC LIMIT 5
D:\OpenServer\domains\kilo.dev\advanced\frontend\controllers\AdController.php(122)
22:30:50.277    info    yii\db\Command::queryInternal    
SHOW FULL COLUMNS FROM `tbl_ad`
D:\OpenServer\domains\kilo.dev\advanced\frontend\controllers\AdController.php(122)
22:30:50.301    info    yii\db\Command::queryInternal    
SHOW CREATE TABLE `tbl_ad`
D:\OpenServer\domains\kilo.dev\advanced\frontend\controllers\AdController.php(122)
22:30:50.306    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\frontend\views\ad\list3.php
D:\OpenServer\domains\kilo.dev\advanced\frontend\controllers\AdController.php(132)
22:30:50.306    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\frontend\views\ad\_index_loop.php
D:\OpenServer\domains\kilo.dev\advanced\frontend\views\ad\list3.php(27)
D:\OpenServer\domains\kilo.dev\advanced\frontend\controllers\AdController.php(132)
22:30:50.310    error    yii\base\InvalidConfigException    
exception 'yii\base\InvalidConfigException' with message 'The "query" property must be an instance of a class that implements the QueryInterface e.g. yii\db\Query or its subclasses.' in D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\data\ActiveDataProvider.php:101

Stack trace:

#0 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\data\BaseDataProvider.php(79): yii\data\ActiveDataProvider->prepareModels()

#1 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\widgets\BaseListView.php(92): yii\data\BaseDataProvider->prepare()

#2 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\Object.php(49): yii\widgets\BaseListView->init()

#3 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\BaseYii.php(383): yii\base\Object->__construct(Array)

#4 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\Widget.php(89): yii\BaseYii::createObject(Array)

#5 D:\OpenServer\domains\kilo.dev\advanced\frontend\views\ad\_index_loop.php(18): yii\base\Widget::widget(Array)

#6 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\View.php(292): require('D:\OpenServer\d...')

#7 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\View.php(232): yii\base\View->renderPhpFile('D:\OpenServer\d...', Array)

#8 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\View.php(135): yii\base\View->renderFile('D:\OpenServer\d...', Array, NULL)

#9 D:\OpenServer\domains\kilo.dev\advanced\frontend\views\ad\list3.php(27): yii\base\View->render('_index_loop', Array)

#10 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\View.php(292): require('D:\OpenServer\d...')

#11 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\View.php(232): yii\base\View->renderPhpFile('D:\OpenServer\d...', Array)

#12 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\View.php(135): yii\base\View->renderFile('D:\OpenServer\d...', Array, Object(frontend\controllers\AdController))

#13 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\Controller.php(307): yii\base\View->render('list3', Array, Object(frontend\controllers\AdController))

#14 D:\OpenServer\domains\kilo.dev\advanced\frontend\controllers\AdController.php(132): yii\base\Controller->render('list3', Array)

#15 [internal function]: frontend\controllers\AdController->actionList3()

#16 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\InlineAction.php(53): call_user_func_array(Array, Array)

#17 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\Controller.php(130): yii\base\InlineAction->runWithParams(Array)

#18 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\Module.php(585): yii\base\Controller->runAction('list3', Array)

#19 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\web\Application.php(77): yii\base\Module->runAction('ad/list3', Array)

#20 D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii\base\Application.php(289): yii\web\Application->handleRequest(Object(yii\web\Request))

#21 D:\OpenServer\domains\kilo.dev\advanced\frontend\web\index.php(14): yii\base\Application->run()

#22 {main}
22:30:50.314    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/exception.php
22:30:50.315    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.316    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.317    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.318    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.319    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.320    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.321    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.322    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.323    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.324    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.325    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.326    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.327    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.328    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.329    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.330    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.331    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.332    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.333    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.334    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.335    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.336    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
22:30:50.337    trace    yii\base\View::renderFile    
Rendering view file: D:\OpenServer\domains\kilo.dev\advanced\vendor\yiisoft\yii2\yii/views/errorHandler/callStackItem.php
Не знаю видно или нет, но запрос SQL сам отработал, а ошибк выбивает на ActiveDataProvider. Все создавалось через gii изначально.
Контроллер:

Код: Выделить всё

<?php

namespace frontend\controllers;

use Yii;
use frontend\models\Ad;
use frontend\models\AdSearch;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\web\VerbFilter;

use yii\db\ActiveRecord;
use yii\data\ActiveDataProvider;
...
    public function actionList3()
    {
        //$model = new Ad;
        $searchModel = new AdSearch;
        #$dataProvider = $searchModel->search($_GET);
        $sql = 'SELECT * FROM `tbl_ad` ORDER BY `time_stamp` ASC, `paid` ASC LIMIT 5';
        $query = Ad::findBySql($sql)->all();
/*        $query = Ad::find()
            ->orderBy('paid ASC, time_stamp DESC');*/
        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);

        return $this->render('list3', [
            'dataProvider' => $dataProvider,
            'searchModel' => $searchModel,
        ]);
    }    
    /**
P.S. Я специально создал отдельно экшн и вьюшку чтобы воспроизвести ошибку.
вьюшка:

Код: Выделить всё

<?php

use yii\helpers\Html;
use yii\widgets\ListView;

/**
 * @var yii\web\View $this
 * @var yii\data\ActiveDataProvider $dataProvider
 * @var app\models\AdSearch $searchModel
 */
?>
<style>
    .bg-info {
        padding: 15px;
    }
</style>
<!-- <div class="bs-example bs-example-bg-classes">
    <p class="bg-primary">Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
    <p class="bg-success">Duis mollis, est non commodo luctus, nisi erat porttitor ligula.</p>
    <p class="bg-info">Maecenas sed diam eget risus varius blandit sit amet non magna.</p>
    <p class="bg-warning">Etiam porta sem malesuada magna mollis euismod.</p>
    <p class="bg-danger">Donec ullamcorper nulla non metus auctor fringilla.</p>
  </div> -->
<div class="row">
        <?= $this->render('_index_loop', [
            'dataProvider' => $dataProvider
        ]); ?>
</div>
Модели:

Код: Выделить всё

<?php

#namespace app\models;
namespace frontend\models;

use Yii;
use yii\base\Model;


/**
 * This is the model class for table "tbl_ad".
 *
 * @property integer $id
 * @property integer $user_id
 * @property string $content
 * @property boolean $paid
 * @property string $time_stamp
 */
class ad extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'tbl_ad';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['user_id', 'content'], 'required'],
            [['user_id', 'content'], 'string'],
            [['paid'], 'boolean'],
            [['time_stamp'], 'safe']
        ];
    }

    /*public function scenarios()
    {
        return [
            'signup' => ['username', 'email', 'password'],
            'resetPassword' => ['password'],
            'requestPasswordResetToken' => ['email'],
        ];
    }*/
    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'user_id' => 'User ID',
            'content' => 'Content',
            'paid' => 'Paid',
            'time_stamp' => 'Time Stamp',
        ];
    }
}

Код: Выделить всё

<?php

namespace frontend\models;

use yii\base\Model;
use yii\data\ActiveDataProvider;
use frontend\models\Ad;
//use yii\db\ActiveRecord;

/**
 * AdSearch represents the model behind the search form about Ad.
 */
class AdSearch extends Model
{
    public $id;
    public $user_id;
    public $content;
    public $paid;
    public $time_stamp;

    public function rules()
    {
        return [
            [['id', 'user_id'], 'integer'],
            [['content', 'time_stamp'], 'safe'],
            [['paid'], 'boolean'],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'user_id' => 'User ID',
            'content' => 'Content',
            'paid' => 'Paid',
            'time_stamp' => 'Time Stamp',
        ];
    }

    public function search($params)
    {
        /*$sql = 'SELECT * FROM `tbl_ad` ORDER BY `time_stamp` ASC, `paid` ASC LIMIT 5';
        $query = Ad::findBySql($sql)->all();*/
        $query = Ad::find();
        
        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);

        if (!($this->load($params) && $this->validate())) {
            return $dataProvider;
        }

        $this->addCondition($query, 'content');
        $this->addCondition($query, 'content', true);
        return $dataProvider;
    }

    protected function addCondition($query, $attribute, $partialMatch = false)
    {
        $value = $this->$attribute;
        if (trim($value) === '') {
            return;
        }
        if ($partialMatch) {
            $value = '%' . strtr($value, ['%'=>'\%', '_'=>'\_', '\\'=>'\\\\']) . '%';
            $query->andWhere(['like', $attribute, $value]);
        } else {
            $query->andWhere([$attribute => $value]);
        }
    }
}
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: findBySql($sql) ошибка

Сообщение lancedevnull »

>class ad extends \yii\db\ActiveRecord

попробуй с большой буквы
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: findBySql($sql) ошибка

Сообщение samdark »

Посмотрите на SqlDataProvider: http://stuff.cebe.cc/yii2docs/yii-data- ... vider.html
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: findBySql($sql) ошибка

Сообщение samdark »

Вообще вот ошибка:

Код: Выделить всё

$query = Ad::findBySql($sql)->all();
/*        $query = Ad::find()
            ->orderBy('paid ASC, time_stamp DESC');*/
        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);
 
->all() запускает запрос и возвращает массив моделей, а data provider ждёт от вас query, то есть то, что было до вызова all.
Vespertilio
Сообщения: 271
Зарегистрирован: 2012.11.30, 07:33

Re: findBySql($sql) ошибка

Сообщение Vespertilio »

Sam Dark писал(а):Вообще вот ошибка:

Код: Выделить всё

$query = Ad::findBySql($sql)->all();
/*        $query = Ad::find()
            ->orderBy('paid ASC, time_stamp DESC');*/
        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);
->all() запускает запрос и возвращает массив моделей, а data provider ждёт от вас query, то есть то, что было до вызова all.
Спасибо. Я в принципе не сомневался что я где-то накосячил ) я просто делал по доке, а там все запросы подобные с ->all(), там не указан такой нюанс. Возможно стоит пометку на этот случай.
Vespertilio
Сообщения: 271
Зарегистрирован: 2012.11.30, 07:33

Re: [OK] findBySql($sql) ошибка

Сообщение Vespertilio »

Кстати если уж перенесли в баги то пожалуюсь на gii =) он иногда косячит. Если создаешь вначале по очереди контроллер, модель - все нормально, но потом когда делаешь CRUD он меняет неймспейс у контроллера с frontend/... на app/.. и все, ошибка. Хотя в ошибке пишеться вроде и правильный путь, но почему-то пишет что не может найти по этому адресу нужный класс, меняешь обратно на frontend - все норм.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: [OK] findBySql($sql) ошибка

Сообщение samdark »

На не имеющее отношение к изначальной теме попрошу жаловаться в отдельных новых темах.
Ответить