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