البرمجة

حلاقة مشكلة قيمة UUID التي تعود كصفر في نماذج Eloquent باستخدام Laravel

في البداية، يظهر أنك قد قمت بتكوين جدول في قاعدة البيانات باستخدام نوع البيانات UUID للمفتاح الرئيسي، ولكن عند إنشاء نموذج Eloquent، تواجه مشكلة حيث يظهر أن قيمة الـ UUID تعود كصفر عند الوصول إليها. لحل هذه المشكلة، يتعين عليك اتخاذ بعض الخطوات.

أولًا، يبدو أنك تقوم بتعيين قيمة الـ UUID باستخدام دالة preg_replace و uniqid. ومن الواضح أن هناك خللًا في كيفية تعيين هذه القيمة. بدلاً من ذلك، يُفضل استخدام حزمة ramsey/uuid لتوليد الـ UUID بشكل صحيح. يمكنك تثبيت هذه الحزمة باستخدام Composer:

bash
composer require ramsey/uuid

ثم يمكنك استخدامها في نموذجك كالتالي:

php
use 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 التي تعود كصفر عند الوصول إليها.

زر الذهاب إلى الأعلى