这是我的产品TableSeeder 我将产品创建到产品表中并与类别建立关系 创建category_product表并向其中添加外键。
在迁移并植入重复数据时,我遇到了错误。 我该如何解决?
use App\Product;
use Illuminate\Database\Seeder;
class ProductsTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
//Product::truncate();
for($i = 1; $i <= 10; $i++){
Product::updateOrCreate([
'name'=> 'Laptop'.$i,
'slug' => 'laptop'.$i,
'details' => [13,14,15][array_rand([13,14,15])].'inch,'.[1,2,3][array_rand([1,2,3])].'TB SSD,32GB RAM',
'price' => rand(1500,3000),
'description' => 'Lorem'.$i.' ipsum dolor sit amet, consectetur adipiscing elit. Maecenas fermentum. laoreet turpis, nec sollicitudin dolor cursus at. Maecenas aliquet, dolor a faucibus efficitur, nisi tellus cursus urna, eget dictum lacus turpis.',
])->categories()->attach(1);
}
$product = Product::find(1)-> categories()->attach(2);
}
这是产品表。
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->string('slug')->unique();
$table->string('details')->nullable();
$table->float('price');
$table->text('description');
//$table->integer('category_id');
$table->timestamps();
});
}
这是类别表。
public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->string('slug')->unique();
$table->timestamps();
});
}
这是关系表。
public function up()
{
Schema::create('category_product', function (Blueprint $table) {
$table->increments('id');
$table->integer('product_id')->unsigned()->nullable();
$table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
$table->integer('category_id')->unsigned()->nullable();
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
$table->timestamps();
});
}
答案 0 :(得分:0)
尝试删除现有表,然后运行迁移。
答案 1 :(得分:0)
发生此错误是因为数据库不为空,并且您没有将属性传递给updateOrCreate()
函数。因此,Laravel试图创建一个新的。 Check the API。
如果您将updateOrCreate()
函数调整为:
Product::updateOrCreate(['id' => $i], [
'name'=> 'Laptop'.$i,
'slug' => 'laptop'.$i,
'details' => [13,14,15][array_rand([13,14,15])].'inch,'.[1,2,3][array_rand([1,2,3])].'TB SSD,32GB RAM',
'price' => rand(1500,3000),
'description' => 'Lorem'.$i.' ipsum dolor sit amet, consectetur adipiscing elit. Maecenas fermentum. laoreet turpis, nec sollicitudin dolor cursus at. Maecenas aliquet, dolor a faucibus efficitur, nisi tellus cursus urna, eget dictum lacus turpis.',
])->categories()->attach(1);