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")
Category
和 ProductCategory
都使用 Uuidd
fonctionnalité, je ne sais pas comment la faire fonctionner.
Merci pour toute aide.
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.