创建视频模型
php artisan make:model Video -m
编写迁移文件
Database\Migrations\2024_10_05_064845_create_videos_table.php
public function up(): void
{
Schema::create('videos', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('description')->nullable();
$table->string('original_file_path')->nullable();
$table->string('thumbnail_path')->nullable();
$table->string('vtt_file')->nullable();
$table->foreignId('user_id')->constrained('users')->cascadeOnDelete();
$table->boolean('processed')->default(false);
$table->timestamp('live_at')->nullable();
$table->integer('processed_percentage')->nullable();
$table->timestamps();
});
}
执行迁移
php artisan migrate
模型关联关系
Models\User.php
use Illuminate\Database\Eloquent\Relations\HasMany;
// 每个用户拥有多个视频
public function videos(): HasMany
{
return $this->hasMany(User::class);
}
Models\Video.php
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
// 获取拥有此视频的用户
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
// 每个视频拥有多种格式
public function formats(): HasMany
{
return $this->hasMany(VideoFormat::class);
}
视频格式模型
php artisan make:model VideoFormat -m
编写迁移文件
Database\Migrations\2024_10_05_071013_create_video_formats_table.php
public function up(): void
{
Schema::create('video_formats', function (Blueprint $table) {
$table->id();
$table->string('quality');
$table->string('file_path');
$table->foreignId('video_id')->constrained('videos')->cascadeOnDelete();
$table->timestamps();
});
}
执行迁移
php artisan migrate