في البداية، يظهر أنك قد قمت بتكوين جدول في قاعدة البيانات باستخدام نوع البيانات UUID للمفتاح الرئيسي، ولكن عند إنشاء نموذج Eloquent، تواجه مشكلة حيث يظهر أن قيمة الـ UUID تعود كصفر عند الوصول إليها. لحل هذه المشكلة، يتعين عليك اتخاذ بعض الخطوات.
أولًا، يبدو أنك تقوم بتعيين قيمة الـ UUID باستخدام دالة preg_replace
و uniqid
. ومن الواضح أن هناك خللًا في كيفية تعيين هذه القيمة. بدلاً من ذلك، يُفضل استخدام حزمة ramsey/uuid
لتوليد الـ UUID بشكل صحيح. يمكنك تثبيت هذه الحزمة باستخدام Composer:
bashcomposer require ramsey/uuid
ثم يمكنك استخدامها في نموذجك كالتالي:
phpuse Ramsey\Uuid\Uuid;
class Person extends Model
{
protected $fillable = [
// ...
];
public function make(array $personData){
$person = new Person;
$person->setUUID();
collect($personData)->each(function ($value, $columnName) use($person){
if(in_array($columnName, $this->fillable)){
$person->{$columnName} = $value;
}
});
$person->save();
return $person;
}
protected function setUUID(){
$this->id = Uuid::uuid4()->toString();
}
}
هذا التغيير يستخدم حزمة ramsey/uuid
لضمان توليد UUID بشكل صحيح. بعد تثبيت الحزمة وتحديث النموذج، يجب أن تلاحظ أن قيمة الـ UUID لا تعود كصفر بعد الآن.
كما يفضل أيضًا التحقق من نوع العمود في جدول قاعدة البيانات. يجب أن يكون نوع العمود الخاص بالـ UUID هو char(36)
كما هو مبين في مخطط الجدول الخاص بك.
باستخدام هذه الطريقة، يمكنك ضمان استخدام الـ UUID بشكل صحيح كمفتاح رئيسي في نموذجك وتجنب القيم الخاطئة عند الوصول إليه.
المزيد من المعلومات
بالطبع، دعونا نوسع على الحل المقترح ونقدم المزيد من المعلومات لتفهم بشكل أفضل السياق الذي يتعلق بمشكلتك.
أولاً وقبل الدخول في تفاصيل الحل، يُفضل دائمًا استخدام نماذج Eloquent بأقصى قدر من الكفاءة والاتساق. في حالتك، استخدام حزمة ramsey/uuid
هو اقتراح جيد لضمان توليد UUID بطريقة صحيحة وموحدة.
تحتوي هذه الحزمة على واجهات وأساليب مفيدة لتسهيل التعامل مع UUIDs. على سبيل المثال، يمكنك استخدام Uuid::uuid4()->toString()
للحصول على نص UUID جديد.
عندما تقوم بتعيين القيمة في النموذج، يمكنك أيضًا التحقق من نجاح العملية باستخدام save
والتي تعيد قيمة true
في حال نجاح الحفظ وfalse
إذا فشل. يمكنك استغلال هذا لمتابعة السير الذي يتبعه نموذجك.
هناك نقطة أخرى يجب مراعاتها، وهي ضرورة التحقق من تكوين نوع العمود في قاعدة البيانات. يجب أن يكون نوع العمود الخاص بالـ UUID هو char(36)
للتأكيد على توافق الأنواع.
بإجمال، يتمثل الحل في استخدام حزمة ramsey/uuid
بشكل صحيح، والتحقق من نجاح عمليات الحفظ، وضمان توافق أنواع العمود في قاعدة البيانات. باستخدام هذه الإرشادات، يجب أن تكون قادرًا على تجنب مشكلة قيم الـ UUID التي تعود كصفر عند الوصول إليها.