Yii фреймворкын үйренеміз (шәйнектен шәйнектерге). Деректер қорымен жұмыс жасау негіздері.

Бұл мақалада деректер қорымен жұмыс жасап көреміз. Бағдарлама 'country' деп аталатын кесетеден мәліметтер алып соны бетте көрсететін болады.

Деректер қорын дайындау

Алдымен біз 'yii2basic' деп аталатын деректор қорын құрыңыз. Сіз оны SQLite, MySQL,PostgreSQL, MSSQL немесе керек десеңіз Oracle деректер қорында құра аласыз. Yii мына аталғандардың барлығымен жұмыс жасай алады. Біз мысал ретінде, mysql-ді пайдаланамыз.

Mysql-де 'yii2basic' (өзіңіз басқашалай атасаңыз да болады) деп аталатын деректер қоры мен 'country' деп аталатын кесте құрамыз. Оны сіз мынандай сұраныстармен орындай аласыз:
CREATE DATABASE yii2basic;
use yii2basic;

CREATE TABLE `country` (
  `code` CHAR(2) NOT NULL PRIMARY KEY,
  `name` CHAR(52) NOT NULL,
  `population` INT(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `country` VALUES ('KZ','Қазақстан',17330494);
INSERT INTO `country` VALUES ('AU','Австралия',18886000);
INSERT INTO `country` VALUES ('BR','Бразилия',170115000);
INSERT INTO `country` VALUES ('CA','Канада',1147000);
INSERT INTO `country` VALUES ('CN','Қытай',1277558000);
INSERT INTO `country` VALUES ('DE','Германия',82164700);
INSERT INTO `country` VALUES ('FR','Франция',59225700);
INSERT INTO `country` VALUES ('GB','Ұлыбритания',59623400);
INSERT INTO `country` VALUES ('IN','Үндістан',1013662000);
INSERT INTO `country` VALUES ('RU','Ресей',146934000);
INSERT INTO `country` VALUES ('US','АҚШ',278357000);



Міне біздің деректеріміз дайын, енді осы деректерді yii-ден қалай пайдалану керектігін қарастырайық.

Деректер қорына байланысты баптау

Бірден шатпақтауды бастамай тұрып сізде php-дің PDO қосымшасы және оның mysql-ге арналған драйвері орнатылғанын тексеріңіз. Бұл сіздің деректер қорымен байланысу үшін қажет болатын қосымша.

Қосымшаларды орнатқан соң, 'config/db.php' файлын ашыңыз және ондағы баптауларды дұрыстаңыз. Мысалы мен оны былай баптадым:
<?php

return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=yii2basic',
    'username' => 'root',
    'password' => 'root',
    'charset' => 'utf8',
];
?>


Осымен байланысқа қажет бар баптау осы. Енді байланысты сіз
Yii::$app->db
арқылы ала аласыз.

Active Record құру

'country' кестесіндегі мәліметтермен жұмыс жасау үшін 'Country' деп аталатын Active Record құруыңыз қажет. Оны 'models/Country.php' файлында құрамыз:
<?php

namespace app\models;

use yii\db\ActiveRecord;

class Country extends ActiveRecord {
}
?>


Болды, дайын. Біз қазір мұнда анау-мынау жазып әуре болмаймыз. Өйткені ол 'yii\db\ActiveRecord' класын кеңейткендіктен, онда көптеген қажетті нәрселер бар.

Мысалыға, енді сіз 'Country' класын пайдаланып, 'country' кестесімен жұмыс жасай аласыз:

use app\models\Country;

// Мемлекет аты бойынша реттелген барлық мәліметтерді алу
$countries = Country::find()->orderBy('name')->all();

// Кілт сөзі "US" болатын мемлекет туралы мәліметті алу
$country = Country::findOne('US');

// "АҚШ" деген сөз шығарылады
echo $country->name;

// Енді мемлекеттің атын өзгертейік
$country->name = 'А.Қ.Ш.';

// және оны былай сақтай саламыз
$country->save();


Жанның рақаты ғой мынау, қалай дедіңіздер? Шәйнектер осы керек емес пе а )). Ешқандай бас аурусыз.

Әрекетті құру

Әрекетсіз қайда барамыз. Енді әрекетті құрайық. Бұл жолы біз мемлекеттерді басқаруға арналған жаңа контроллер құрып, әрекетті соның ішінде құрамыз. Яғни, логикалық жағынан жеке контроллер қажет және оның ішінде 'index' әрекетін құрамыз:
<?php

namespace app\controllers;

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

class CountryController extends Controller {

    public function actionIndex() {
        $query = Country::find();

        $pagination = new Pagination([
            'defaultPageSize' => 5,
            'totalCount' => $query->count(),
        ]);

        $countries = $query->orderBy('name')
            ->offset($pagination->offset)
            ->limit($pagination->limit)
            ->all();

        return $this->render('index', [
            'countries' => $countries,
            'pagination' => $pagination,
        ]);
    }
}
?>


Бұл контроллерді 'controllers/CountryController.php' файлында сақтаңыз.

Әрекеттің ішінде біз мәліметтерді аламыз. Мұндағы
Country::find()
country кестесіндегі барлық мәліметті алуға негізделген. Оны шектеу үшін 'yii\data\Pagination' көмекші класын пайдаланамыз. Оның көмегімен бір беттегі мәліметтер санын шектеп, беттен бетке өту функциясын жасай аламыз.
'defaultPageSize' => 5
осылай бір бетте неше мәлімет көрсетілетінін айттық. Соңында 'index' көрсетілімін шығарамыз.

Көрсетілімді құру

'views' папкасының ішінде 'country' папкасын құрыңыз. Бұл папка 'Country' контроллері шақыратын барлық көрсетілімдерді сақтау үшін қажет. Енді 'views/country' папкасының ішінде 'index.php' файлын құрыңыз:
<?php
use yii\helpers\Html;
use yii\widgets\LinkPager;
?>
<h1>Мемлекеттер</h1>
<ul>
<?php foreach ($countries as $country): ?>
    <li>
        <?= Html::encode("{$country->name} ({$country->code})") ?>:
        <?= $country->population ?>
    </li>
<?php endforeach; ?>
</ul>

<?= LinkPager::widget(['pagination' => $pagination]) ?>


Көрсетілім екі беттен тұрады, бірінші бөлімде мемлекеттер туралы мәліметтер көрсетілсе. Екінші бөлікте пагинатор шығарылады. yii\widgets\LinkPager пагинатор көрсетуге арналған виджет.

Биссимиллә, ал көрейік

Мына url-ді браузерде енгізіңіз:
http://hostname/index.php?r=country/index


Мәс, саған, шықтыыыыы!!! Керек десеңіз пагинаторымен.

Екінші бетке өткенде url қалай өзгергенін байқаңыз:
http://hostname/index.php?r=country/index&page=2


Мұнда пагинтор бізге көптеген жеңілдіктер береді. Мысалы бірінші бетті ашқанымызда ол мәліметтерді мынандай шарттармен таңдап алады «LIMIT 5 OFFSET 0» яғни, бірінші бес мәліметті алу, екінші бетке өтсек сәйкесінше «LIMIT 5 OFFSET 5». Ал біздің LinkPager біздің пагинаторымыз генерациялаған url мекен жайларды алып, батырмаларды шығарады.

Қорытынды

Бұл мақалада yii-де деректер қорымен жұмыс қаншалық оңай және ыңғайлы екенін көрдік. Айта кететіні мақалалар толық үйрету үшін емес, таныстыру үшін (яғни, өзім әлі танысып жатырмын ;) ) жазылып жатыр. Тағы бір мақаладан соң yii компоненттерімен тереңірек және толығырақ танысуды бастаймыз.

  • +2
2 пікір
yerbol89
Керемет жазба. Сұрайын дегенім Yii орнатылғаннан бастап Bootstrap бірге келеді ма?
shainek
Кешір досым ) енді көрдім, иә бірге келеді. Бірақ одан ешқандай тәуелділік жоқ. Bootstrap тек бастапқы бетті, gii модулін дұрыс көрсету үшін пайдаланылады. А иа ол жай модуль оны өшіріп тастап өзіңнің жеке css js файлдарыңды жаза бересің.
Тек тіркелген қолданушылар ғана пікір қалдыра алады.