Laravel 中枢轴 table 中的播种数据问题

Problem with seeding data in pivot table in Laravel

我在尝试在 Laravel 的数据库中播种我的枢轴 table 时遇到问题。我收到错误

Base table or view not found: 1146 Table 'user_cuisines' doesn't exist

而我的 table 名字实际上是 user_cuisine,所以由于某种原因 laravel 似乎没有显示 table。由于字母顺序,我在我的关系中添加了 user_cuisine 是枢轴 table。任何帮助表示赞赏。这是我的代码。

UserCuisineTableSeeder.php

<?php

use App\UserCuisine;
use App\UserProfile;
use Illuminate\Database\Seeder;

class UserCuisineTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $cuisines = UserCuisine::all();

        UserProfile::all()->each(function ($userProfile) use ($cuisines) { 
            $userProfile->cuisines()->attach(
                $cuisines->random(rand(1, 12))->pluck('id')->toArray()
            ); 
        });
    }
}

DatabaseSeeder.php

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call(WhitelabelTableSeeder::class);
        $this->call(CitiesTableSeeder::class);
        $this->call(UserTableSeeder::class);
        $this->call(UserProfilePropertiesSeeder::class);
        $this->call(UserProfileTableSeeder::class);
        $this->call(FieldTableSeeder::class);
        $this->call(FieldValueTableSeeder::class);
        $this->call(CuisineTableSeeder::class);
        $this->call(LiteratureTableSeeder::class);
        $this->call(MusicTableSeeder::class);
        $this->call(SportTableSeeder::class);
        $this->call(TvTableSeeder::class);
        $this->call(UserCuisineTableSeeder::class);
        $this->call(UserInterestTableSeeder::class);
    }
}

UserCuisine.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class UserCuisine extends Model
{
    protected $fillable = [
        'name'
    ];

    public function userProfiles()
    {
        return $this->belongsToMany(UserProfile::class, 'user_cuisine');
    }
}

UserProfile.php

<?php

namespace App;

class UserProfile
{

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function cuisines()
    {
        return $this->belongsToMany(UserCuisine::class, 'user_cuisine');
    }
}

user_cuisine_table

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateUserCuisineTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('user_cuisine', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('user_id');
            $table->unsignedBigInteger('cuisine_id');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('user_cuisine');
    }
}

cuisine_table

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateCuisineTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('cuisine', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('cuisine');
    }
}

Laravel 期望 table 名称为 user_cuisines 但您将其命名为 user_cuisine 而没有 "s"

您可以通过更改迁移或将 protected $table = 'user_cuisine'; 添加到您的模型来解决此问题。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class UserCuisine extends Model
{

    protected $table = 'user_cuisine';

}

按照命名约定,我建议更改 table 名称

好像user_cuisinestable不存在,你创建的cuisine不是user_cuisines

只需将下面的代码放在 UserCuisine 模型中。

protected $table= 'user_cuisine';

例如,我建议在创建模型时始终使用 -m 标志以避免这些类型的错误。

php artisan make:model ModelName -m