Laravel eloquent UUID in a pivot table

后端 未结 2 2064
Happy的楠姐
Happy的楠姐 2021-01-07 06:27

This question is like this one: laravel uuid not showing in query. However, the difference in this question is about that table is a pivot table with

相关标签:
2条回答
  • 2021-01-07 06:41

    I think this might be what you want:

    In your model that defines the BelongsToMany relationship add this property:

    protected $casts = ['relationName.pivot.id' => 'string'];
    

    Update

    I guess we can make use of anonymous classes in php7.0 here instead of creating a model class for the pivot:

    i didn't test this code so i don't know if it will work or not, this is just an idea

    public function activeStatuses()
    {
        return $this->belongsToMany('ModelName')
                    ->using(class_basename(new class extends \Illuminate\Database\Eloquent\Relations\Pivot {
                        protected $casts = ['id' => 'string'];
                    }));
    }
    

    Generally i would prefer to create model for the pivot table or simply use a pivot class

    0 讨论(0)
  • 2021-01-07 06:41

    It works for me:

    // use Illuminate\Database\Eloquent\Relations\Pivot;
    return $this->belongsToMany(Vendor::class, 'vendors_has_geo_cities', 'city_id', 'vendor_id')
                ->using(new class extends Pivot {
                    use UuidTrait;
                });
    
    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Support\Str;
    
    trait UuidTrait
    {
        public function initializeUuidTrait(): void
        {
            $this->setIncrementing(false);
            $this->setKeyType('string');
        }
    
        /**
         * The "booting" method of the model.
         *
         * @return void
         */
        protected static function bootUuidTrait()
        {
            self::creating(function (Model $model) {
                $model->setAttribute($model->getKeyName(), Str::orderedUuid());
            });
        }
    }
    
    0 讨论(0)
提交回复
热议问题