ترفندهایی برای روابط فصیح لاراول

یکی از نقاط قوت لاراول سینتکس ظریف آن است. اگر مدل‌ها و روابط زیادی در لاراول دارید (به دلیل وجود جداول زیاد در پایگاه داده)، پیمایش اغلب می‌تواند به کدهای کمتر ظریف ختم شود. با گذشت زمان، سه افزونه کوچک برای من موفقیت آمیز بوده است که در زیر به طور خلاصه به معرفی آنها می پردازم. برای انجام این کار، ما فقط از برخی روش های ارثی، جادویی و مجموعه های سفارشی استفاده می کنیم.


ابتدا یک مدل جدید تحت app \ ConvenienceModel.php ایجاد می کنیم:

b45e29b9125c2ab565b5526442437686

سپس اجازه می دهیم همه مدل ها از ConvenienceModel جدید ما به ارث برسند:

b45e29b9125c2ab565b5526442437686

عملکردهای خود را با روابط مخلوط کنید

اگر می خواهید مدل های متصل دریافت کنید ، از دستورالعمل استاندارد برای فراخوانی آنها استفاده می کنید:

b45e29b9125c2ab565b5526442437686

اگر اکنون منطق تجارت خود را اضافه کرده اید ، دوست دارید از علامت مورد شتر (پایین) استفاده کنید:

b45e29b9125c2ab565b5526442437686

ما می خواهیم نحو هر دو نوع را استاندارد کنیم. برای انجام این کار ، ما روش جادویی __call را به ConvenienceModel اضافه می کنیم:

b45e29b9125c2ab565b5526442437686

این فراخوانی در مثال بالا نیز امکان پذیر است:

b45e29b9125c2ab565b5526442437686

اشیا empty خالی را بررسی کنید

اگر می‌خواهید نام کشور را برای آدرس یک شخص نمایش دهید، اغلب کد زیر را مشاهده می‌کنید:

b45e29b9125c2ab565b5526442437686

برای جلوگیری از این امر، کتابخانه stringhelper را اضافه می‌کنیم و در صورت عدم یافتن مدل، یک شیء خاص از کلاس empty به نام `empty` را برمی‌گردانیم.:

b45e29b9125c2ab565b5526442437686

این بدان معنی است که تماس با موفقیت انجام می شود (در این مثال، اگر چیزی پیدا شود، نام کشور خروجی است، در همه موارد دیگر یک رشته خالی):

b45e29b9125c2ab565b5526442437686

اگر ما همچنین می خواهیم موردی را که ممکن است کاربر با شناسه 42 حتی وجود نداشته باشد ، پوشش دهیم ، یک تابع کمکی کوچک نیز برای این کار خواهیم ساخت:

b45e29b9125c2ab565b5526442437686

بنابراین تماس زیر یک رشته خالی را تحویل می دهد حتی اگر کاربر اصلاً وجود نداشته باشد:

b45e29b9125c2ab565b5526442437686

به راحتی روابط n: m را پیمایش کنید

در آخر ، ما می خواهیم کد زیر را ساده کنیم:

b45e29b9125c2ab565b5526442437686

برای این منظور از امکان مجموعه های سفارشی استفاده می کنیم. ما در حال گسترش مدل راحتی هستیم:

b45e29b9125c2ab565b5526442437686

در مرحله بعد، فایل app\Helpers\ConvenienceCollection.php را ایجاد می‌کنیم که تضمین می‌کند وقتی توابع ناشناخته در Collections فراخوانی می‌شوند، تابع برای همه موارد موجود در collections اجرا شود.:

b45e29b9125c2ab565b5526442437686

بنابراین ما می توانیم از کد زیر استفاده کنیم تا تمام اسامی همه کشورها را از همه آدرس های همه والدین فرد خارج کنیم:

b45e29b9125c2ab565b5526442437686

اما تماس هایی مانند موارد زیر نیز امکان پذیر است:

b45e29b9125c2ab565b5526442437686

مرتب سازی بر اساس چندین ستون

دستور زیر فقط بر اساس موقعیت مکانی مرتب‌سازی می‌کند، هرچند احتمالاً نتیجه‌ی مورد نظر ما این نبوده است.:

b45e29b9125c2ab565b5526442437686

ما در حال گسترش ConvenienceCollection هستیم تا بتوانیم مرتب سازی بر روی چندین ستون را مرتب کنیم:

b45e29b9125c2ab565b5526442437686

با این کار می توانیم مجموعه را طبق چندین ستون طبقه بندی کنیم با:

b45e29b9125c2ab565b5526442437686

مرتب سازی استاندارد

ما در حال گسترش ConvenienceCollection با یک عملکرد کمکی دیگر هستیم:

b45e29b9125c2ab565b5526442437686

اکنون می توانید به هر مدل یک عملکرد مرتب سازی استاندارد استاندارد بدهید:

b45e29b9125c2ab565b5526442437686

با این کار می توانیم مجموعه ای را با آنها مرتب کنیم:

b45e29b9125c2ab565b5526442437686

نام اشیا

هر مدل روش getLabel را پیاده سازی می کند (بسته به مدل getName متفاوت است):

b45e29b9125c2ab565b5526442437686

با این کار می توانید به سرعت و به راحتی نام یک شی را نمایش دهید. سپس می توانید روش کمکی sortByLabel را در ConvenienceCollection پیاده سازی کنید:

b45e29b9125c2ab565b5526442437686

نتایج خالی

اگر یک مرحله متوسط ​​خالی باشد ، توابع Laravel اولین () و آخرین () معمولاً صفر برمی گردند. بنابراین getFirst () و getLast () را معرفی می کنیم تا تماس زیر همیشه موفقیت آمیز باشد:

b45e29b9125c2ab565b5526442437686

با این کار ما یک ___خالی_خالی را که __x تشخیص می دهد به شما تحویل می دهیم:

b45e29b9125c2ab565b5526442437686

بازگشت