Maison > Questions et réponses > le corps du texte
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.
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.