пишем ливерпуль, читаем манчестер

Сделал маленькое открытие – в createCommand разное обслуживание для разных запросов. Смешивание UPDATE и queryAll дает потерю времени до полудня.

[php]$cmd=$conn->createCommand(‘SELECT * FROM post’);
$posts=$cmd->queryAll();
$cmd=$conn->createCommand(‘UPDATE post SET status=1’);
$cmd->execute();[/php]

марьяжное

Поженил ActiveForm и несколько chosen-select на одной странице. Люблю себя.

Подсказка – как поиметь свальный грех в одном приложении. Только забыли написать, что вся эта радость вбивается в config/web.php.

[php]’components’ => [
‘db1’ => [
‘class’ => ‘yii\db\Connection’,
‘dsn’ => ‘mysql:host=localhost;dbname=db1name’,
‘username’ => ‘db1username’,
‘password’ => ‘db1password’,
],
‘db2’ => [
‘class’ => ‘yii\db\Connection’,
‘dsn’ => ‘mysql:host=localhost;dbname=db2name’,
‘username’ => ‘db2username’,
‘password’ => ‘db2password’,
],
][/php]

на память

В yii2, как известно, переписаны все классы. На мой взгляд, управление выборками из БД стало удобней чем в yii1, хоть и, по традиции, все закопано под горой кода. Например, теперь where и order by пишутся так:

[php]// find the customer whose ID is 1
$customer = Customer::find()->where([‘id’ => 1])->one();
// find all active customers and order them by their age:
$customers = Customer::find()
->where([‘status’ => 1])
->andWhere(‘age>30’)
->orderBy(‘age’)
->all();[/php]

По between теперь так, например:

[php]$model = User::find()
->select(‘username’)
->asArray()
->where(‘userid between 1 and 5’)
->all();
[/php]

Но я не стал заморачиваться и сделал по-рабоче-крестьянски, через findBySql(). Интересная заметка пригодилась для осмысления процесса. Но сделал опять по-сермяжьи, так надежней, имхо.

[php]’query’=>qqWeek::findBySql(‘SELECT * FROM qq
WHERE date between now()-interval 7 day and now()+0
group by qq
order by ww desc’)
[/php]

ps А вот есть интересная новость – телеграм подженили на малинке, что есть крайне гуд, это дает возможность построить систему сообщений из умного дома.

pps Из-за вылезшего косяка во вьюхе – грид нумерует страницы как попало – пришлось до конца разобраться в active record и active query. Почитал код класса и сделал контроллер как ножом по маслу.

[php] $dataProvider = new ActiveDataProvider([
‘query’ => TopQqAllTime::find()
->orderBy([‘ww’=>SORT_DESC])
->groupBy(‘qq’)
->select(‘qq,sum(ww) AS ww’)]);
[/php]

Ман по AR is тута. А ‘->all()’ превращает сталь в жесть, после него хоть потоп – массив. Помни об этом, играя регтайм.

маленькие сюрпризы yii2

Никого не трогаю, переношу админку с yii1 на yii2, оставляю в db.php host=localhost, генератор моделей вываливает кучу,

Database Exception – yii\db\Exception SQLSTATE[HY000] [2002] No such file or directory

ладно, думаю, прописываю host=mydomain.com, gii опять навалил кучку

Database Exception – yii\db\Exception
SQLSTATE[HY000] [1045] Access denied for user ‘qq’@’mydomain.com’ (using password: YES)
Caused by: PDOException

А вот так оно спокойно соединилось:

[php]return [
‘class’ => ‘yii\db\Connection’,
‘dsn’ => ‘mysql:host=127.0.0.1;dbname=qq’,
‘username’ => ‘qq’,
‘password’ => ‘qq’,
‘charset’ => ‘utf8’,
];[/php]

Чудны дела твои, Qiang Xue…

И еще – во втором yii в crud-генераторе нужно указывать полный namespace, в отличии от yii1, иначе он не осциллирует, падла.

И много-много раз – в yii1 была ссылка на сгенерированный контент, а в yii2 ее нет, негодяи.

Одминко

Делаю новую админку TDS на Yii. Сдвинулось дело с мертвой точки, стоило всего лишь почитать ман по compare() класса CDbCriteria и понять как добавлять order by и where. Прекрасный фреймворк, учиться, учиться и еще раз учиться.

ps Аналог group by и between из mysql для Yii выглядят так:

[php]$criteria=new CDbCriteria;
$criteria->group = ‘filters’;// по полю filters
$criteria->addBetweenCondition(
‘date’,’01.01.2015′,’02.01.2015′,’AND’);[/php]