After you log in to the program, you can create your first data.
The result of executing this data set:
App\Models\User:
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use HasFactory;
/**
* The attributes that are mass assignable.
* @var array
*/
protected $fillable = ["name", "email", "password", "country_id"];
/**
* The attributes that should be cast.
* @var array
*/
protected $casts = [
"name" => "string",
"email" => "string",
"password" => "string",
"country_id" => "int",
];
/**
* The reverse relation for "users->countries".
*/
public function country(): HasOne
{
return $this->hasOne(Country::class, "id", "country_id");
}
/**
* The opposite relation for "users->books".
*/
public function books(): BelongsToMany
{
return $this->belongsToMany(
Book::class,
"users_books",
"user_id",
"book_id",
);
}
}
App\Models\Country:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Country extends Model
{
use HasFactory;
/**
* The attributes that are mass assignable.
* @var array
*/
protected $fillable = ["name"];
/**
* The attributes that should be cast.
* @var array
*/
protected $casts = ["name" => "string"];
/**
* The opposite relation for "countries->users".
*/
public function users(): HasMany
{
return $this->hasMany(User::class, "country_id", "id");
}
}
App\Models\Book:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Book extends Model
{
use HasFactory;
/**
* The attributes that are mass assignable.
* @var array
*/
protected $fillable = ["name", "content"];
/**
* The attributes that should be cast.
* @var array
*/
protected $casts = ["name" => "string", "content" => "string"];
/**
* The reverse relation for "books->users".
*/
public function authors(): BelongsToMany
{
return $this->belongsToMany(
User::class,
"users_books",
"book_id",
"user_id",
);
}
}
/database/migrations/2022_12_01_000000_create_users_table.php:
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Migrations\Migration;
return new class extends Migration {
/**
* Run the migrations.
* @return void
*/
public function up()
{
Schema::create("users", function (Blueprint $table) {
$table->id();
$table->string("name");
$table->string("email");
$table->string("password");
$table
->foreignId("country_id")
->nullable()
->constrained("countries")
->cascadeOnUpdate()
->cascadeOnDelete()
->nullOnDelete();
$table->timestamps();
});
}
/**
* Reverse the migrations.
* @return void
*/
public function down()
{
Schema::dropIfExists("users");
}
};
/database/migrations/2022_12_01_000001_create_countries_table.php:
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Migrations\Migration;
return new class extends Migration {
/**
* Run the migrations.
* @return void
*/
public function up()
{
Schema::create("countries", function (Blueprint $table) {
$table->id();
$table->string("name");
$table->timestamps();
});
}
/**
* Reverse the migrations.
* @return void
*/
public function down()
{
Schema::dropIfExists("countries");
}
};
/database/migrations/2022_12_01_000002_create_books_table.php:
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Migrations\Migration;
return new class extends Migration {
/**
* Run the migrations.
* @return void
*/
public function up()
{
Schema::create("books", function (Blueprint $table) {
$table->id();
$table->string("name");
$table->string("content");
$table->timestamps();
});
}
/**
* Reverse the migrations.
* @return void
*/
public function down()
{
Schema::dropIfExists("books");
}
};
/database/migrations/2022_12_01_999999_create_users_books_table.php:
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Migrations\Migration;
return new class extends Migration {
/**
* Run the migrations.
* @return void
*/
public function up()
{
Schema::create("users_books", function (Blueprint $table) {
$table->foreignId("user_id")->constrained("users");
$table->foreignId("book_id")->constrained("books");
});
}
/**
* Reverse the migrations.
* @return void
*/
public function down()
{
Schema::dropIfExists("users_books");
}
};