php artisan make:migration create_trains_table
RESULT:
Migration [C:\MAMP\htdocs\Laravel\laravel-migration-seeder\database\migrations/2023_10_30_130439_create_trains_table.php] created successfully.
public function up(): void
{
Schema::create('trains', function (Blueprint $table) {
$table->id(); //ALREADY PRESET BY LARAVEL
$table->string('company', 20)->nullable();
$table->string('departure_station');
$table->dateTime('departure_time');
$table->string('arrival_station');
$table->dateTime('arrival_time');
$table->tinyInteger('train_code')->unsigned();
$table->tinyInteger('carriages')->nullable()->unsigned();
$table->boolean('delay')->default(0);
$table->boolean('canceled')->default(0);
$table->timestamps(); //ALREADY PRESET BY LARAVEL
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('trains');
}
php artisan migrate
SHOW DATABASES;
+--------------------------+
| Database |
+--------------------------+
| information_schema |
| db-university |
| db-workshop |
| laravel_migration_seeder |
| laravel_model_controller |
| mysql |
| performance_schema |
| sys |
+--------------------------+
8 rows in set (0.00 sec)
ENTER THE DATABASE
USE laravel_migration_seeder;
SHOW TABLES;
+------------------------------------+
| Tables_in_laravel_migration_seeder |
+------------------------------------+
| failed_jobs |
| migrations |
| password_reset_tokens |
| personal_access_tokens |
| trains |
| users |
+------------------------------------+
6 rows in set (0.00 sec)
CHECK THE TABLE
DESCRIBE trains;
+-------------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| company | varchar(20) | YES | | NULL | |
| departure_station | varchar(255) | NO | | NULL | |
| departure_time | datetime | NO | | NULL | |
| arrival_station | varchar(255) | NO | | NULL | |
| arrival_time | datetime | NO | | NULL | |
| train_code | tinyint(3) unsigned | NO | | NULL | |
| carriages | tinyint(3) unsigned | YES | | NULL | |
| delay | tinyint(1) | NO | | 0 | |
| canceled | tinyint(1) | NO | | 0 | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+-------------------+---------------------+------+-----+---------+----------------+
12 rows in set (0.00 sec)
php artisan make:seeder TrainsTableSeeder
RESULT:
Seeder [C:\MAMP\htdocs\Laravel\laravel-migration-seeder\database/seeders/TrainsTableSeeder.php] created successfully.
php artisan make:model Train
use Faker\Generator as Faker;
use App\Models\Train;
ADD Faker AS A VARIABLE CALLED FAKER TO THE SEEDER RUN FUNCTION AND POPULATE THE SEED
class TrainsTableSeeder extends Seeder
{
/**
* Run the database seeds.
*/
// USES FAKER
public function run(Faker $faker): void
{
//USES A FOR LOOP TO ADD 10 ENTRIES ON THE TABLE
for ($i = 0; $i < 10; $i++) {
$train = new Train();
$train->company = $faker->company();
$train->departure_station = $faker->city();
$train->departure_time = $faker->dateTimeThisMonth('+10 days');
$train->arrival_station = $faker->city();
$train->arrival_time = $train->departure_time->modify('+2 days')->format('Y-m-d H:i:s');
$train->train_code = $faker->numberBetween(0, 200);
$train->carriages = $faker->randomDigitNotNull();
$train->delay = $faker->boolean();
$train->canceled = $faker->boolean();
//SAVE THE DATA
$train->save();
}
}
}
php artisan db:seed --class=TrainsTableSeder
php artisan make:migration update_trains_table --table=trains
EDIT THE TABLE IN THE UP AND DOWN FUNCTIONS IN THE update_trains_table.php MIGRATION FILE (REMOVES THE STRING LIMIT 50 FROM THE company COLUMN)
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('trains', function (Blueprint $table) {
$table->string('company')->nullable()->change();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
// REVERTS THE company COLUMN TO THE ORIGINAL VALUE
Schema::table('trains', function (Blueprint $table) {
$table->string('company', 50)-change();
});
}
};
php artisan make:controller Guests/PageController
public function home()
{
// RETURNS THE VIEW 'home' (home.blade.php)
return view('home');
}
ADD
use App\Models\Train;
EDIT
public function home()
{
return view('home', ['trains' => Train::all()]);
}
ADD THE PageController TO USE ITS METHODS
use App\Http\Controllers\Guests\PageController;
GETS THE ROUTE FROM THE Controller PageController CLASS AND USES THE 'home' METHOD. GIVES THE ROUTE THE "home" NAME:
Route::get('/', [PageController::class, 'home'])->name('home');
EDIT PageController (App\Http\Controllers\Guests\PageController.php):
public function home()
{
$trains = Train::all();
// SORTS A COLLECTION USING A CALLBACK VALUE
// https://laravel.com/docs/5.1/collections#method-sortby
$sorted_trains = $trains->sortBy('departure_time')->values()->all();
//compact() CREATES AN ARRAY FROM THE $sorted_trains COLLECTION
return view('home', compact('sorted_trains'));
}
LINK THE SEEDER IN seeders/DatabaseSeeder.php
use App\Database\Seeders\TrainsTableSeeder;
ADD IN seeders/DatabaseSeeder run METHOD:
public function run(): void
{
$this->call([
TrainsTableSeeder::class,
]);
// \App\Models\User::factory(10)->create();
// \App\Models\User::factory()->create([
// 'name' => 'Test User',
// 'email' => 'test@example.com',
// ]);
}
USE (https://laravel-news.com/migrate-fresh)
php artisan migrate:fresh --seed
ON THE PageController:
public function home()
{
$trains = Train::all();
$sorted_trains = Train::orderBy('departure_time', 'asc')->paginate(3);
//compact() CREATES AN ARRAY FROM THE $sorted_trains COLLECTION
return view('home', compact('sorted_trains'));
}
ON THE VIEW MARKUP (houses.blade.php IN THIS EXAMPLE):
<div class="my-3">
{{$sorted_trains->links('pagination::bootstrap-5')}}
</div>