cari

Rumah  >  Soal Jawab  >  teks badan

Ralat umum dalam Laravel 9.x: Medan 'id' tidak mempunyai nilai lalai

Saya menggunakan UUID dalam aplikasi saya dan saya telah melaksanakan ciri seperti yang ditunjukkan dalam talian seperti ini:

trait Uuid
{
    protected static function boot(): void
    {
        parent::boot();

        static::creating(function (Model $model) {
            if (!$model->getKey()) {
                $model->{$model->getKeyName()} = (string) Str::uuid();
            }
        });
    }

    public function getIncrementing(): bool
    {
        return false;
    }

    public function getKeyType(): string
    {
        return 'string';
    }
}

Sebaliknya, ini terpakai hampir di semua tempat: Saya cuba mencipta jadual pangsi pada produk saya seperti ini:

public function categories(): BelongsToMany
{
    return $this->belongsToMany(
        Category::class,
        ProductCategory::class,
        'product_id',
        'category_id'
    );
}

Penghijrahan kelihatan seperti ini:

public function up(): void
{
    Schema::create('product_categories', function (Blueprint $table) {
        $table->uuid('id')->primary();
        $table->foreignUuid('product_id')->index();
        $table->foreignUuid('category_id')->index();
        $table->timestamps();
    });
}

Namun, setiap kali saya melakukan perkara berikut semasa menyemai:

Product::first()->categories()->sync(Categories::all()->pluck('id'));

Saya nampak ralat ini:

PDOException::("SQLSTATE[HY000]: Ralat umum: 1364 Medan 'id' tidak mempunyai nilai lalai")

Ciri

CategoryProductCategory 都使用 Uuidd, saya tidak tahu cara membuatnya berfungsi.

Terima kasih atas sebarang bantuan.

P粉714780768P粉714780768229 hari yang lalu468

membalas semua(1)saya akan balas

  • P粉731977554

    P粉7319775542024-04-07 09:44:23

    Sebagai salah satu penyelesaian yang mungkin, anda boleh menggunakan model dan ciri jadual pangsi anda sendiri.

    Lagi: https://laravel.com/docs/ 9.x/eloquent-relationships#defining-custom-intermediate-table-models.

    balas
    0
  • Batalbalas