دسته بندی : زبان برنامه نویسی PHP فریم ورک LARAVEL

استفاده از چند کلید برای رابطه polymorphic

داخل رابطه پلی مورفیک نام کلاس های استفاده شده طرف رابطه رو میشه بوسیله morphmap مجدد نام گذاری کرد تا بصورت namespace کامل مدلمون ذخیره نشن.

Relation::morphMap([
    'user' => User::class
]);

حالا طریقه استفاده لاراول به چه صورتی هستش، زمانی که میخوایین چیزی رو تو دیتابیس ثبت کنید و نوشتار (update, create) اتفاق میوفته لاراول مقادیر (value) این ارایه رو چک میکنه اگه نام کلاس با مدل رابطه من برابری داشت کلید این مقدار رو داخل دیتابیس ذخیره میکنه.

و اگه از نوع خوندن(select) از دیتابیس باشه داخل کلید ها جستجو میکنه و کلاس مورد نظر (مدل) ما رو هدف قرار میده.

ولی الان اگه من دو بار

Relation::morphMap([
    'user' => User::class,
    'employee' => User::class
]);

بیام با کلید های مختلف مدل User رو هدف قرار بدم چی میشه؟

💡 نوشتار داخل دیتابیس درست اعمال نمیشه. دلیلش اینه وقتی جستجو بر اساس value اتفاق میوفته اولین عضوی که داخل این ارایه وجود داره) از بالا به پایین) رو به من بر میگردونه و مثلا تو مثال بالا هیچوقت مقدار employee رو به من نمیده تا در دیتابیس ثبت بشه.

ولی ببینید راه حل چقدر آسونه ! ما مدل User.phpرو تغییر نام میدیم میکنیم userable.phpو می‌آییم دو مدل جدید ایجاد میکنیم (هر تعداد تایپی که دارید در اینجا برای یوزر دو تا تایپ employee, user)

خوب پس الان دو تا مدل جدید داریم ولی بجای اینکه از کلاس زیر ارث ببریم

 Illuminate\Database\Eloquent\Model;



از کلاس مدل userable.phpارث می‌بریم و داخل morphmap مدل user, employee که ساختیم رو اضافه میکنیم.


0| از0رای

مطالب مشابه


0 دیدگاهافزودن