Как подключить стороннюю базу данных

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
mugur
Сообщения: 6
Зарегистрирован: 2017.12.08, 05:30

Как подключить стороннюю базу данных

Сообщение mugur »

Добрый день!

Только начал осваивать фреймворк. А как можно сделать следующее:

В базе на postgresql каждый час генерируются 2 таблицы с учетом трафика по такой схеме

acct_incoming_YMD_H00
acct_outcoming_YMD_H00 Y-год, M-месяц, D-день, H-час

Хочу прикрутить к ним Yii2 и с помощью фреймфворка производить поиск по вход и исх трафику айпи адресов.
Не могу понять как мне описать модель и т.д. Как примерно вообще это реализуется в Yii2?
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: Как подключить стороннюю базу данных

Сообщение Nex-Otaku »

Для создания моделей и контроллеров "для чайников" есть утилита Gii.
Запускаешь, тыкаешь кнопочки, генерируется код.
Изучишь этот код и переделаешь как тебе нужно.

Ну это если лень читать документацию и учебники по Yii.
steaze
Сообщения: 30
Зарегистрирован: 2017.01.28, 21:25

Re: Как подключить стороннюю базу данных

Сообщение steaze »

Если имена динамические, можно сделать через QueryBuilder.
mugur
Сообщения: 6
Зарегистрирован: 2017.12.08, 05:30

Re: Как подключить стороннюю базу данных

Сообщение mugur »

По Gii простые модели с одной таблицей я понял как делать. А вот как динамически менять имя таблицы в модели этого понять не могу

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

/models/Abon.php

<?php
namespace app\models;

use Yii;
use yii\db\ActiveRecord;
use yii\db\Connection;

$table_name = 'acct_incoming_20171201_0000';

class Abon extends ActiveRecord
{
         public static function getDb(){
                                          return Yii::$app->db1;
                                        }
         public static function tableName($table_name)
                                        {
                                          //return 'acct_incoming_20171201_0000';
                                          return $table_name;
                                        }
}
И чтобы в контроллере использовать одну ту же модель.

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

/controllers/AbonController.php
<?php
namespace app\controllers;

use yii\web\Controller;
use yii\data\Pagination;
use app\models\Abon;

class AbonController extends Controller
{
    public function actionIndex()
    {
        //$table_name = 'acct_incoming_20171201_0000';

        $query = Abon::find();
      
        $pagination = new Pagination([
            'defaultPageSize' => 25,
            'totalCount' => $query->count(),
        ]);

        $abons = $query->orderBy('ip_src')
            ->offset($pagination->offset)
            ->limit($pagination->limit)
            ->all();

        return $this->render('index', [
            'abons' => $abons,
            'pagination' => $pagination,
        ]);
    }
}
?>
Объясните это новичку пожалуйста)))
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: Как подключить стороннюю базу данных

Сообщение Nex-Otaku »

Метод "tableName" статический, значит по-нормальному никак, разве что через такой костыль:

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

class Abon extends ActiveRecord
{
    public static $tableName;

    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return self::$tableName;
    }

    public static function setTableName($tableName)
    {
        self::$tableName = $tableName;
    }
    ...
Потом вызываем так

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

Abon::setTableName('acct_incoming_20171201_0000');
$query = Abon::find();
mugur
Сообщения: 6
Зарегистрирован: 2017.12.08, 05:30

Re: Как подключить стороннюю базу данных

Сообщение mugur »

Nex-Otaku писал(а): 2017.12.12, 18:09 Метод "tableName" статический, значит по-нормальному никак, разве что через такой костыль:

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

class Abon extends ActiveRecord
{
    public static $tableName;

    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return self::$tableName;
    }

    public static function setTableName($tableName)
    {
        self::$tableName = $tableName;
    }
    ...
Потом вызываем так

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

Abon::setTableName('acct_incoming_20171201_0000');
$query = Abon::find();
Спасибо большое, Nex-Otaku! Как раз то что не смог написать. Задачу реализовать смог благодаря вам и очень помогли в практическом освоении фреймфорка)))
Ответить