<Proger/> Про мене
ProProger

Yii2 > Вчимо YII2. #4. Робота з базою даних MySql

Автор: / Час публікації: 22/08/2017 23:42

Всім привіт! Сьогодні я розкажу як зчитувати, записувати, обновлювати і видаляти дані в таблицях MySql. В Yii вже включені ці методи для роботи з базами даних. Адже це є одна із найголовніших речей для створення динамічного веб-сайту! Для початку нам потрібно створити базу даних.

Створення бази даних

У PHPMyAdmin створюємо нову базу даних, а в ній таблицю з назвою 'yii_comments'. У цій таблиці створюємо такі поля: 'id' - AUTO_INCREMENT INT(10), 'name' - VARCHAR(255) і 'text' - VARCHAR(255). І для наглядності додайте декілька коментарів.

Підключення бази даних в YII2

Тепер потрібно підключити базу даних. Для цього відкриваємо файл '/config/db.php' і вставляємо туди цей код:

$db_host = 'localhost';// Host
$db_name = 'yii2';//назва бази даних
$username = 'root';// ім'я користувача
$password = '';// пароль користувача
$prefix = 'yii_';// префікс для таблиць
return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host='.$db_host.';dbname='.$db_name,
    'username' => $username,
    'password' => $password,
    'charset' => 'utf8',
    'tablePrefix' => $prefix,
    
];

Створення моделі для таблиці

Після того, як створено базу даних і підключено її до YII2, потрібно створити модель. Ми уже створювали модель для форми у попередньому уроці. Але сьогодні ми створимо трохи іншу модель! Переходимо у папку 'models' і там створюємо файл 'Comments.php'. відкриваємо цей файл і в ньому потрібно прописати ім'я простору "app\models" і підключити уже існуючий клас "ActiveRecord". Для цього пишемо:

use yii\db\ActiveRecord;

Тепер створюємо клас, який наслідує клас 'ActiveRecord', з іменем цього файлу і це їм'я має відповідати назві таблиці бази даних без префіксу(У моємо випадку ''yii_). Але якщо Вам потрібно назвати цей клас якось по-іншому потрібно в тілі класу додати цей метод, в якому буде повертатись назва таблиці без префіксу:

public static function tableName(){
    return 'comments';
}

Також існує метод "afterFind()" для того, щоб зробити якісь дії з даними після їхнього вивантаження з бази даних(Наприклад, змінити якись текст). Ми зараз попробуємо зробити текст коментаря жирним. Для цього потрібно створити нову властивість у цьому класі. Нехай це буде '$bold_text'. Властивості з назвами стовпців автоматично створюються!

public function afterFind(){
    $this->bold_text = ''.$this->text.'';
}

Ось код, який має бути у цьому файлі:

namespace app\models;

use yii\db\ActiveRecord;
class Comments extends ActiveRecord{
    public function afterFind(){
        $this->text = ''.$this->text.'';
    }
}

Сторінка з коментарями

Тепер переходимо в контролер і додаєм нову сторінку, наприклад, 'comments'. У контролері потрібно ще підключити модель, яку ми щойно створили:

use app\models\Comments;

Тепер у дії контролера потрібно отримати всі дані. Для цього потрібно скористатись моделлю.

$comments = Comments::find()->orderBy('id desc')->all();// Ось це буде аналогічно запиту 'Select * from `comments` order by `id` desc'

Також існує багато додаткових методів для вибірки даних наприклад 'where()'. Детальніше про ці методи і клас 'activeRecord' можна прочитати тут. Дані ми отримали. Тепер потрібно їх вивести для цього у методі 'render()' передаємо змінну '$comments'. Ось, що у мало получитись у action:

public function actionComments(){
    $comments = Comments::find()->orderBy('id desc')->all();
    return $this->render('comments',[
        'comments' => $comments,
    ]);
}

У представленні потрібно вивесті ці всі дані за допомогою 'foreach()':

foreach($comments as $comment){
    echo "".$comment->name." - ".$comment->bold_text."
"; }

Ось, як це виглядає у браузері:

вигляд у браузері

Видалення і обновлення даних

Для того щоб видалити або обновити дані потрібно для початку знайти їх у таблиці. Для цього існує два способи:

$comment = Comments::find()->where(['id' => 1])->one();

і

$comment = Comments::findOne(['id' => 1]);

Тепер, щоб обновити дані потрібно щось змінити для початку у властивостях. Наприклад:

$comment->text = 'Привіт!';

Після чого виклати метод 'save()':

$comment->save();

А щоб видалити рядок з даними потрібно після знаходження цього рядка у таблиці викликати метод 'delete()'

$comment->delete();

Створення нового запису

Для створення нового запису потрібно створити новий об'єкт нашої моделі і перечислити всі властивості:

$comment = new Comments();
$comment->name = 'Сергій';
$comment->text = 'Новий коментар!';

І після чого викликати метод 'save()':

$comment->save();

Ось і все!

Посилання:

ActiveRecord - www.yiiframework.com/doc-2.0/yii-db-activerecord.html
Не забувай написати коментар і поширити посилання в соц. мережах за допомогою кнопок нижче! Дякую за увагу!

Коментарі(0)