laravel 开发youtube项目4-视频模型

54 阅读1分钟
创建视频模型

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