سلام دوستان
خسته نباشید
من میخوام درون پروژه ام یک فیلد به اسم uuid داشته باشم که برام یه پسوورد تولید کنه
میخوام این فیلد در کنار فیلد id وجود داشته باشه
اما وقتی uuid رو با یک تابع در مایگریشنم مینویسم به ازای همه کاربراان uuidهای تکراری ایجاد میکنه
ممنون میشم اگر راهنماییم کنید
$table->uuid('uuid')->default(str_shuffle('abcdefghijklmnopqrstuuwxvz'));
کدی که شما در مایگریشن نوشتید برای کاری که در نظرتون هست انجام بشه کاملا اشتباهه. با اینکار زمان مایگریت یک رشته ایجاد میشه و جدول شما بعد از ایجاد هر رکورد از همون رشته استفاده میکنه
شما میتونید به اینصورت برای هر یوزر رشته رندوم ایجاد کنید :
ابتدا یه Trait
با نام Uuid
ایجاد کنید
بعد از ایجاد نیاز دارید که این پکیج رو نصب کنید :
https://github.com/ramsey/uuid
با دستور :
composer require ramsey/uuid
خب حالا کدهایی که باید درون trait
نوشته باشه ه این صورت هست:
<?php
namespace App\Models\Traits;
use Ramsey\Uuid\Uuid as PackageUuid;
/**
* Trait Uuid.
*/
trait Uuid
{
/**
* @param $query
* @param $uuid
*
* @return mixed
*/
public function scopeUuid($query, $uuid)
{
return $query->where($this->getUuidName(), $uuid);
}
/**
* @return string
*/
public function getUuidName()
{
return property_exists($this, 'uuidName') ? $this->uuidName : 'uuid';
}
/**
* Use Laravel bootable traits.
*/
protected static function bootUuid()
{
static::creating(function ($model) {
$model->{$model->getUuidName()} = PackageUuid::uuid4()->toString();
});
}
}
حالا کافیه در مدل User
این Trait
رو use
کنید
همچنین نیازی نیست داخل مایگریشن به uuid
مقدار دیفالت بدید به این صورت نوشته بشه کافیه
$table->uuid('uuid');
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟