【发布时间】:2020-05-29 15:33:36
【问题描述】:
对于个人项目,我正在尝试使用 laravel 创建一个网上商店。 我有一个产品表和一个图像表,它们具有一对多多态关系。 有些产品是不同的,可能只需要一个图像,而其他产品则需要能够有多个。 我正在努力寻找一种方法来知道哪个图像是哪个。例如,一张图片可能是产品的缩略图,另一张可能是产品一部分的图片等。我应该创建一个新表 image_types 并将 id 存储在我的 images 表中,还是这无效?
产品表
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateProductsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->text('description')->nullable();
$table->decimal('stock', 8, 2)->nullable();
$table->decimal('price', 8, 2)->nullable();
$table->unsignedBigInteger('product_category_id');
$table->foreign('product_category_id')->references('id')->on('product_categories')->onDelete('cascade');
$table->unsignedBigInteger('account_type_id');
$table->foreign('account_type_id')->references('id')->on('account_types')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('products');
}
}
图片表
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateImagesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('images', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('url');
$table->morphs('imageable');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('images');
}
}
【问题讨论】:
-
这不是多态关系的用途。您的产品可以有 1 个或多个图像,这只是一个标准的非多态
hasMany关系。一个特定的图像可以用于多个产品吗? -
所有产品都有独特的图像。
-
那么这只是
hasMany的关系。 -
好的,那么我应该如何为此设计我的数据库,以便能够将缩略图和另一张图片添加到一个产品,而仅将缩略图添加到另一个产品?
-
在模型中设置关系。
标签: laravel polymorphism