laravel database migrations
Този урок обяснява боравенето с база данни Laravel, миграциите, засяването, необработените SQL заявки, красноречивите модели, красноречивите връзки, занаятчиите и майсторите
В предишния урок на Laravel Tutorial Series , научихме за архитектурата, инсталацията и компонентите на Laravel Framework. Видяхме подробно структурата на проекта Laravel PHP.
В този урок ще разгледаме базата данни Laravel, миграции, засяване, стартиране на сурови SQL заявки, красноречиви модели, красноречиви връзки, занаятчия и тинкър. Използвали сме Laravel версия 7 във всички примери.
Какво ще научите:
Взаимодействие с база данни Laravel
Laravel Framework взаимодейства с бази данни, използвайки необработен SQL, плавният конструктор на заявки, и Красноречив ORM . Той поддържа следните четири бази данни.
- MySQL версия 5.6+
- PostgreSQL (Postgres) версия 9.4+
- SQLite версия 3.8.8+
- SQL Server версия 2017+
Стъпки за свързване на вашия проект с базата данни MySQL:
Етап 1: Създайте нов база данни на име db_ академия (можете да използвате всяко подходящо име) чрез phpMyadmin или HeidiSQL .
Стъпка 2: Създайте нов проект с име академия (можете да използвате всяко подходящо име).
Забележка:Моля, обърнете се към нашия предишен урок, Laravel Tutorial for Beginners 1, ако не знаете как да инсталирате Laravel и да създадете нов проект.
Стъпка # 3: Отворете проекта в IDE и отворете .env файл. Променете стойността на DB_DATABASE (име на база данни) до db_ академия (можете да използвате всяко подходящо име). И двете име на база данни и стойността на DB_DATABASE в .env файлът трябва да е еднакъв.
Забележка : Може да се наложи да промените други параметри на базата данни в .env файла, като DB_USERNAME, DB_PASSWOD и т.н., в зависимост от конфигурацията на вашата база данни.
Следващата екранна снимка показва конфигурацията на базата данни във файла .env.
Laravel миграции
Laravel Migration е специална функция, използвана за създаване на таблица на базата данни. По подразбиране xxxx_xx_xx_xxxxxx _create_users_table.php файл и xxxx_xx_xx_xxxxxx _create_failed_jobs_table.php файл са включени.
Структура на миграцията на Laravel
Класът Laravel Migration използва следните два метода:
- Методът нагоре (): Този метод се използва за създаване на нова таблица, колона или индекс в базата данни.
- Методът надолу (): Този метод се използва за изпускане на съществуваща таблица, колона или индекс в базата данни. Този метод е методът, обратен на метода up ().
Създаване на Laravel миграция
Изпълнете следната команда в командния ред, за да създадете миграция, наречена create_tutors_table .
php artisan make:migrationcreate_tutors_table
Изпълнението на горната команда ще създаде файл с име xxxx_xx_xx_xxxxxx_create_tutors_table.php в база данни / миграции директория.
Отвори xxxx_xx_xx_xxxxxx_create_tutors_table.php файл и модифицирайте съществуващия код, както е показано по-долу.
id(); $table->string('name'); $table->string('subject'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('tutors'); } }
Стартиране на Laravel Migrations
Изпълнете следната команда в командния ред, за да стартирате всички налични миграции.
php artisan migrate
Горната команда ще създаде съответните таблици в базата данни, както е показано по-долу.
Отмяна на миграциите
# 1) Отмяна на последната партида от миграции
Изпълнете следната команда в командния ред, за да върнете последна партида миграции (може да включва единични или многократни миграции).
php artisan migrate:rollback
# 2) Отмяна на миграциите, осигуряващи стъпката
Изпълнете следната команда в командния ред, за да върнете последните две миграции .
php artisan migrate:rollback --step=2
# 3) Отмяна на всички миграции на приложението
Изпълнете следната команда в командния ред, за да върнете всички миграции на приложението.
php artisan migrate:reset
# 4) Отмяна и мигриране с помощта на една команда
Изпълнете следната команда в командния ред, за да върнете се и мигрирайте с помощта на една команда.
php artisan migrate:refresh
# 5) Отмяна и мигриране ограничено не. на миграциите
Изпълнете следната команда в командния ред, за да върнете се и мигрирайте последните две миграции с помощта на една команда.
php artisan migrate:refresh --step=2
# 6) Пуснете всички таблици и мигрирайте
Изпълнете следната команда в командния ред, за да пуснете всички таблици и мигрирайте .
php artisan migrate:fresh
Laravel засяване
Когато разработвате приложение, имате нужда от данни, за да тествате приложението. Посяването се използва за вмъкване на тестови данни в базата данни.
Създаване на сеялка
Етап 1: Изпълнете следната команда в командния ред, за да създадете сеялка, наречена UserSeeder .
php artisan make:seederUserSeeder
Тази команда ще създаде файл с име UserSeeder.php в база данни / семена директория.
Стъпка 2: Отвори UserSeeder.php файл и модифицирайте съществуващия код, както е показано по-долу.
insert(( 'name' => Str::random(5), 'email' => Str::random(5).'@user.com', 'password' => Hash::make('password'), )); } }
Стъпка 3: Отвори Файл DatabaseSeeder.php в база данни / семена директория и модифицирайте съществуващия код, както е показано по-долу.
call(UserSeeder::class); } }
Забележка : The DatabaseSeeder class се използва за извикване на други класове семена.
Работещи сеялки
Етап 1: Изпълнете следната команда в командния ред, за да регенерира автоматичното зареждане на Composer .
composer dump-autoload
Стъпка 2: Изпълнете следната команда в командния ред, за да стартирате DatabaseSeeder клас.
php artisan db:seed
Вместо да изпълнявате горната команда, можете да изпълните следната команда в командния ред, за да стартирате UserSeeder клас.
php artisan db:seed --class= UserSeeder
Забележка : Изпълнете следната команда в командния ред към пуснете всички таблици и стартирайте отново всички миграции .
php artisan migrate:fresh --seed
Стъпка 3: Проверете вмъкнатите данни с базата данни.
Базата данни ще покаже изход, подобен на този по-долу:
Изпълнение на Raw SQL заявки
Изпълнение на вмъкване на заявка
Етап 1: Добавете следния кодов сегмент в маршрути / web.php файл, за да вмъкнете нов запис в преподаватели маса.
Route::get('/insert', function () { DB::insert('insert into tutors(name,subject) values(?,?)',('Mr John','Computer Science')); });
Стъпка 2: Посетете URL адреса: http: //academy.test/insert
Стъпка 3: Проверете вмъкнатите данни с базата данни.
Базата данни ще покаже изход, подобен на следния екран.
Изпълнение на заявка за избор
Етап 1: Добавете следния кодов сегмент в маршрути / web.php файл за извличане на данни от преподаватели таблица, която има документ за самоличност е равно на две .
Route::get('/select',function(){ $tutors=DB::select('select * from tutors where id=?',(1)); foreach($tutors as $tutor) { echo $tutor->name.' is teaching '.$tutor->;subject; } });
Стъпка 2: Посетете URL адреса: http: /academy.test/select
Стъпка 3: Браузърът ще покаже изход, подобен на следния екран.
Изпълнение на заявка за актуализация
Етап 1: Добавете следния кодов сегмент в маршрути / web.php файл за актуализиране на записа в преподаватели таблица, която има документ за самоличност е равно на 1 .
Route::get('/update', function(){ $tutors=DB::update('update tutors set name='Mr. Brown' where id=?',(1)); return $tutors; });
Стъпка 2: Посетете следния URL адрес: http: //academy.test/update
Стъпка 3: Проверете актуализираните данни с базата данни.
Базата данни ще покаже изход, подобен на изображението по-долу:
Изпълнение на заявка за изтриване
Етап 1: Добавете следния кодов сегмент в маршрути / web.php файл, за да изтриете записа в преподаватели таблица, която има документ за самоличност е равно на 1 .
Route::get('/delete',function(){ $tutors=DB::delete('delete from tutors where id=?',(1)); return $tutors; });
Стъпка 2: Посетете URL адреса: http: //academy.test/delete
Стъпка 3: Проверете изтритите данни с базата данни.
Базата данни ще покаже изход, подобен на изображението по-долу:
Красноречиви модели на Laravel
В архитектурата на MVC характерът М означава Модел . Моделът обработва данните, използвани от приложението. Всички модели се съхраняват в ап директория. The Потребител модел ( User.php) е моделът по подразбиране. Всяка таблица от базата данни може да има съответстващ красноречив модел. Например, Учител модел съхранява данни в преподаватели маса.
Забележка: Името на множественото число на класа ще се използва като име на таблицата, освен ако не е посочено друго.
Създаване на красноречив модел
Изпълнете следната команда в командния ред, за да създадете модел с име Учител .
php artisan make:model Tutor
Тази команда ще създаде файл с име Учител.php в ап директория.
Вместо горната команда, можете да изпълните следната команда в командния ред, за да създадете миграция на база данни при създаване на модела.
php artisan make:modelTutor --migration
Или
php artisan make:modelTutor -m
И двете от горните команди ще осигурят един и същ изход.
Вмъкване на данни
Етап 1: Добавете следния кодов сегмент в маршрути / web.php файл, за да вмъкнете нов запис в преподаватели маса.
ляво съединение срещу ляво външно съединение
Route::get('/insert-data',function(){ $tutor=new Tutor; $tutor->name='Mr George'; $tutor->subject='Mathematics'; $tutor->save(); });
Забележка : Поставете чертата “ използвайте App Tutor ”В маршрути / web.php файл, както е показано по-долу.
Стъпка 2: Посетете следния URL адрес: http: //academy.test/insert-data
Стъпка 3: Проверете вмъкнатите данни с базата данни.
Базата данни ще покаже изход, подобен на изображението по-долу:

Намерете данни
Етап 1: Добавете следния кодов сегмент в маршрути / web.php файл за намиране / извличане на записа в преподаватели таблица, която има документ за самоличност е равно на две .
Route::get('/find-data',function(){ $tutor=Tutor::find(2); return $tutor->name; });
Стъпка 2: Посетете следния URL адрес: http: //academy.test/find-data
Стъпка 3: Браузърът ще покаже изход, подобен на изображението по-долу:

Актуализиране на данни
Етап 1: Добавете следния кодов сегмент в маршрути / web.php файл за актуализиране на записа в преподаватели таблица, която има документ за самоличност е равно на две .
Route::get('/update-data',function(){ $tutor=Tutor::find(2); $tutor->name='Ms Georgina'; $tutor->subject='Computer Science'; $tutor->save(); });
или
Route::get('/update-data',function(){ Tutor::where('id',2)-> update(('name'=>'Ms Georgina','subject'=>'Computer Science')); });
Стъпка 2: Посетете следния URL адрес: http: //academy.test/update-data
Стъпка 3: Проверете актуализираните данни с базата данни.
Базата данни ще покаже изход, подобен на изображението по-долу:

Изтриване на данни
Етап 1: Добавете следния кодов сегмент в маршрути / web.php файл за изтриване на записа в преподаватели таблица, която има документ за самоличност е равно на две .
Route::get('/delete-data',function(){ $tutor=Tutor::find(2); $tutor->delete(); });
Стъпка 2: Посетете следния URL адрес: http: //academy.test/delete-data
Стъпка 3: Проверете изтритите данни с базата данни.
Базата данни ще покаже изход, подобен на изображението по-долу:

Меко изтриване на данни
Вместо изтриване на данни от базата данни, мекото изтриване задава атрибут, наречен изтрит_ат върху модела и го вмъкнете в таблицата на базата данни.
Използвайте следната черта, за да активирате меко изтриване.
Осветете Database Eloquent SoftDeletes
Следният сегмент на кода може да се използва за меко изтриване на данни.
Route::get('/soft-delete-data',function(){ Tutor::find(1)->delete(); });
Вземете меко изтриване на данни
The withTrashed () метод може да се използва за Вземете меко изтриване на данни както е показано по-долу.
Route::get('/read-soft-delete-data',function(){ $tutor=Tutor::withTrashed()->where('id',1)->get(); return $tutor; });
Възстановяване на меко изтриване на данни
The Възстанови() метод може да се използва за възстановяване на меко изтриване на данни както е показано по-долу.
Route::get('/restore-data',function(){ Tutor::withTrashed()->where('id',1)->restore(); });
Изтриване на данни за постоянно
The forceDelete () метод може да се използва за изтриване на данни за постоянно както е показано по-долу.
Route::get('/force-delete-data',function(){ Tutor::onlyTrashed()->forceDelete(); });
Красноречиви взаимоотношения на Laravel
Красноречивата връзка помага за лесното свързване на таблици в базата данни.
Красноречиви типове взаимоотношения
Следният списък показва различните видове красноречиви взаимоотношения:
- Взаимоотношения един към един
- Връзка един към много
- Връзка много към много
- Има връзка с един човек
- Има връзка с много хора
- Едно към едно (полиморфно) отношение
- Отношение един към много (полиморфно)
- Много-към-много (полиморфна) връзка
# 1) Взаимоотношения един към един
Описание: Това е връзката „едно към едно“ между колоните на различни таблици.
Пример за връзка един към един:
hasOne('AppBook); } }
Пример за връзка с един към един (обратен):
belongsTo('App Author); } }
# 2) Връзка един към много
Описание: При този тип взаимоотношения един модел притежава произволен брой други модели.
Пример за връзка с един към много:
hasMany('AppReview'); } }
Пример за връзка с един към много (обратен):
belongsTo('AppTutorial'); } }
# 3) Връзка много към много
Описание: Това е по-сложна връзка от връзките едно към едно и едно към много и трябва да създадете обобщена таблица, за да дефинирате такава връзка.
Пример за връзка между много към много:
belongsToMany('AppBook); } }
Пример за връзка между много към много (обратна):
belongsToMany('AppAuthor); } }
# 4) Има взаимоотношения с един човек
Описание: Той свързва моделите чрез една междинна връзка.
Има пример за връзка:
hasOneThrough('AppOwner', 'AppCar'); } }
# 5) Има много взаимоотношения
Описание: Тя позволява достъп до отдалечени или междинни отношения по лесен метод.
Пример за връзка с много-много:
hasManyThrough('AppBook, 'AppAuthor); } }
# 6) Взаимоотношения един към един (полиморфни)
Описание: Подобно е на взаимоотношението един към един, но целевият модел може да принадлежи към повече от един тип модел на една асоциация.
Пример за еднолично (полиморфно) отношение:
morphTo(); } } class Article extends Model { /** * Get the article's image. */ public function image() { return $this->morphOne('AppImage', 'imageable'); } } class Author extends Model { /** * Get the author's image. */ public function image() { return $this->morphOne('AppImage', 'imageable'); }
# 7) Взаимоотношения един към много (полиморфни)
Описание: Подобно е на отношението един към много, но целевият модел може да принадлежи към повече от един тип модел на една асоциация.
Пример за взаимоотношения един към много (полиморфни):
morphTo(); } } class Article extends Model { /** * Get all of the article's comments. */ public function comments() { return $this->morphMany('AppComment', 'commentable'); } } class Audio extends Model { /** * Get all of the audio’s comments. */ public function comments() { return $this->morphMany('AppComment', 'commentable'); } }
# 8) Много-към-много (полиморфна) връзка
Описание: При този тип взаимоотношения целевият модел има уникални записи, които могат да споделят между останалите модели.
Пример за връзка между много към много (полиморфни):
morphToMany('AppComment, commentable); } }
Laravel занаятчия
В предишния урок го научихме Занаятчия е интерфейс на командния ред ( CLI ).
Занаятчийски команди
Изпълнете следната команда в командния ред, за да видите всички налични Занаятчийски команди .
php artisan
Следващата екранна снимка показва резултата от горната команда.

Следващата таблица показва някои от важните занаятчийски команди със съответните им функционалности, които са взети от изхода на горната команда (php artisan).
Команда функционалност кеш памет: изчистване Изтрийте кеша на приложенията помогне Показва помощ за команда списък Изброява команди мигрират Изпълнете миграциите на базата данни тест Стартирайте тестовете за приложение калайджия Взаимодействайте с приложението си auth: clear-resets Измийте токените за нулиране на изтекла парола db: семе Посейте базата данни със записи събитие: списък Избройте събитията и слушателите на приложението ключ: генериране Задайте клавиша за приложение make: канал Създайте нов клас канал make: компонент Създайте нов клас компонент на изглед make: контролер Създайте нов клас контролер make: събитие Създайте нов клас за събитие марка: фабрика Създайте нова фабрика за модели make: слушател Създайте нов клас за слушател на събития make: поща Създайте нов клас по имейл make: междинен софтуер Създайте нов клас среден софтуер make: миграция Създайте нов файл за миграция марка: модел Създайте нов клас красноречив модел make: уведомление Създайте нов клас за уведомяване make: наблюдател Създайте нов клас на наблюдател make: политика Създайте нов клас на политика make: доставчик Създайте нов клас на доставчик на услуги make: ресурс Създайте нов ресурс марка: сеялка Създайте нов клас сеялка make: тест Създайте нов тестов клас мигрират: пресни Пуснете всички таблици и стартирайте отново всички миграции мигриране: опресняване Нулирайте и стартирайте отново всички миграции мигриране: нулиране Възстановяване на всички миграции на база данни мигриране: откат Възстановяване на последната миграция на база данни известия: таблица Създайте миграция за таблицата с известия маршрут: списък Избройте всички регистрирани маршрути съхранение: връзка Създайте символните връзки, конфигурирани за приложението
Laravel Tinker
Tinker е REPL (READ-EVAL-PRINT-LOOP), който ви позволява да взаимодействате с приложението в командния ред. Тинкър взаимодейства с база данни, без да регистрира маршрути.
какво означава несъответствие на ключовете за мрежова сигурност
Използвайте Tinker с Artisan и по подразбиране включва.
Активиране на Tinker Environment
Изпълнете следната команда в командния ред, за да активирате средата на Tinker.
php artisan tinker
Следващата екранна снимка показва резултата от горната команда.

Поставете данни с Tinker
Изпълнете следните команди в командния ред, за да вмъкнете нов запис в потребители маса.
$user = new AppUser; $user->name = 'User A'; $user->email = 'usera@user.com'; $user->password = 'user123'; $user->save();
Базата данни ще покаже изход, подобен на следния екран.

Намерете данни с Tinker
Изпълнете следната команда в командния ред, за да намерите / извлечете записа, който има документ за самоличност равна на две в потребители маса.
$user = AppUser::find(2);
Командният ред ще покаже изход, подобен на следния екран.

Актуализирайте данните с Tinker
Изпълнете следната команда в командния ред, за да актуализирате записа, който има документ за самоличност равна на две в потребители маса.
$user = AppUser::find(2); $user->name = 'User B'; $user->email = 'userb@user.com'; $user->save();
Базата данни ще покаже изход, подобен на следния екран.

Изтриване на данни с Tinker
Изпълнете следната команда в командния ред, за да изтриете записа, който има документ за самоличност равна на две в потребители маса.
$user = AppUser::find(2); $user->delete();
Базата данни ще покаже изход, подобен на следния екран.

Заключение
Laravel Framework взаимодейства с базите данни, използвайки суров SQL, конструктора на плавни заявки и Eloquent ORM. Моделът обработва данните, използвани от приложението. Красноречивата връзка помага за лесното свързване на таблици в базата данни.
Миграцията е специална функция, използвана за създаване на таблица на базата данни. Seeding се използва за вмъкване на тестови данни в базата данни, което е много полезно за разработчика, тъй като разработчикът се нуждае от данни, за да тества приложението при разработване. Tinker взаимодейства с база данни, без да регистрира маршрути.
Надяваме се, че този урок ви е бил полезен! В следващия урок ще обсъдим формуляри, качване на файлове, удостоверяване, изпращане на имейли, сесии и т.н.
Приятно учене!
<< PREV Tutorial | СЛЕДВАЩ Урок >>
Препоръчително четене
- Колекция Laravel и урок за Laravel Forge
- Формуляри Laravel и правила за валидиране с пример
- Laravel сесия, качване / изтегляне на файлове и разрешения
- Урок за PHP Laravel за начинаещи: Какво представлява рамката на Laravel
- MongoDB Създаване на резервно копие на база данни
- Тестване на база данни с JMeter
- Урок за базата данни на Oracle - Какво представлява базата данни на Oracle?
- Топ 10 Инструменти за проектиране на бази данни за изграждане на сложни модели данни