Ralat umum dalam Laravel 9.x: Medan 'id' tidak mempunyai nilai lalai
P粉714780768
P粉714780768 2024-04-06 11:12:54
0
1
464

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粉714780768
P粉714780768

membalas semua(1)
P粉731977554

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan