شرایطی وجود دارد که برای برخی سوابق موجود در مجموعه / جدول باید آرایه ای از شناسه ها را بدست آورید. من دو روش سریع برای انجام آن به شما نشان خواهم داد – یکی بسیار محبوب است ، و دیگری عملکردی است که فقط امروز فهمیدم.
تصور کن ، داری hasMany () رابطه – یک نقش مجوزهای زیادی دارد. و سپس لازم است شناسه های مجوز را با یک نقش خاص دریافت کنید.
کد معمول برای انجام این کار با خواهد بود برداشت () تابع:
// returns array of IDs
$permissionIDs = $role->permissions->pluck('id');
اما اگر نام کلید اصلی افزایش خودکار “id” نباشد ، چه می کنید؟ ظاهراً می توانید کلیدها را با استفاده از مدل لاراول دریافت کنید modelKeys () در مجموعه:
// Same result as above. Even same character count :)
$permissionIDs = $role->permissions->modelKeys();
شرح رسمی از modelKeys () روش بسیار کوتاه است: “آرایه ای از کلیدهای اصلی را دریافت کنید.”
توجه کنید که ، همانطور که قبلاً گفتم ، روی آن کار می کند مجموعه ها، نه فقط در مدل لاراول. بنابراین روش برداشت () برای هر دو مدل و مجموعه وجود دارد ، بنابراین هر دو کار می کنند:
$allPermissions = Permission::pluck('id');
$permissions = $role->permissions->pluck('id');
اما در صورت modelKeys ()، این با خطا شکست خواهد خورد “تماس با روش تعریف نشده App Permission :: modelKeys ()”:
$allPermissions = Permission::modelKeys();
راه حل این است که همه نتایج را به مجموعه برسانید و سپس کلیدها را بدست آورید:
$allPermissions = Permission::all()->modelKeys();
اما اگر تمام سوابق مربوط به جدول بزرگ را بدست آورید ، ممکن است باعث مشکلات عملکردی شود.
بنابراین ، فقط یک نکته سریع در مورد modelKeys () روشی که من فقط در حال حاضر یاد گرفته ام ، بیشتر شبیه “جالب برای دانستن” است تا عملی در پروژه های روزمره …