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

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


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

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

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

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

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

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

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

b45e29b9125c2ab565b5526442437686

برای جلوگیری از این ، ما کتابخانه stringhelper را در اختیار داریم و اگر مدلی پیدا نشد ، یک شی special خاص از کلاس خالی را خالی برمی گردانیم:

b45e29b9125c2ab565b5526442437686

این امر همچنین تماس را موفقیت آمیز می کند (در این مثال ، اگر موردی یافت شود ، نام کشور در همه موارد دیگر یک رشته خالی است).

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

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

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

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

سپس برنامه پرونده \ Helpers \ ConvenienceCollection.php را ایجاد می کنیم ، که اطمینان حاصل می کند فراخوانی توابع ناشناخته در مجموعه ها عملکرد همه موارد موجود در مجموعه را اجرا می کند:

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

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

تماس زیر فقط بر اساس مکان مرتب می شود ، اگرچه احتمالاً آن چیزی نبود که شما می خواستید:

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

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

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

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

نام اشیا

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

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

نتایج خالی

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

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

بازگشت