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