شرایطی وجود دارد که برای برخی سوابق موجود در مجموعه / جدول باید آرایه ای از شناسه ها را بدست آورید. من دو روش سریع برای انجام آن به شما نشان خواهم داد – یکی بسیار محبوب است ، و دیگری عملکردی است که فقط امروز فهمیدم.

تصور کن ، داری 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 () روشی که من فقط در حال حاضر یاد گرفته ام ، بیشتر شبیه “جالب برای دانستن” است تا عملی در پروژه های روزمره …