Maison  >  Questions et réponses  >  le corps du texte

Erreur générale dans Laravel 9.x : le champ 'id' n'a pas de valeur par défaut

J'utilise l'UUID dans mon application et j'ai implémenté la fonctionnalité comme indiqué en ligne comme ceci :

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';
    }
}

Rétrospectivement, cela s'applique presque partout : j'essaie de créer un tableau croisé dynamique sur mon produit comme ceci :

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

La migration ressemble à ceci :

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();
    });
}

Cependant, chaque fois que je fais ce qui suit pendant l'ensemencement :

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

Je vois cette erreur :

PDOException::("SQLSTATE[HY000] : Erreur générale : 1364 Le champ 'id' n'a pas de valeur par défaut")

CategoryProductCategory 都使用 Uuidd fonctionnalité, je ne sais pas comment la faire fonctionner.

Merci pour toute aide.

P粉714780768P粉714780768219 Il y a quelques jours438

répondre à tous(1)je répondrai

  • P粉731977554

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

    Comme l'une des solutions possibles, vous pouvez utiliser votre propre modèle et fonctionnalités du tableau croisé dynamique.

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

    répondre
    0
  • Annulerrépondre