Laravel- ի ուժեղ կողմերից մեկը նրա էլեգանտ շարահյուսությունն է: Եթե Laravel-ում շատ մոդելներ և հարաբերություններ ունեք (բազմաթիվ աղյուսակների պատճառով), ապա անցումը հաճախ կարող է ավարտվել ոչ էլեգանտ կոդով: Ժամանակի ընթացքում ինձ համար հաջողվել են երեք փոքր ընդլայնումներ, որոնք ես կցանկանայի համառոտ ներկայացնել ստորև: Դա անելու համար մենք պարզապես օգտագործում ենք որոշ ժառանգական, կախարդական մեթոդներ և հատուկ հավաքածուներ:
Նախ մենք ստեղծում ենք նոր մոդել \ ConvenienceModel.php հավելվածի ներքո:
b45e29b9125c2ab565b5526442437686
Դրանից հետո մենք թույլ ենք տալիս, որ բոլոր մոդելները ժառանգեն մեր նոր ConvenienceModel- ից:
b45e29b9125c2ab565b5526442437686
Խառնել ձեր սեփական գործառույթները հարաբերությունների հետ
Եթե ցանկանում եք ստանալ կապակցված մոդելներ, դրանք զանգահարելու համար օգտագործում եք ստանդարտ շարահյուսություն:
b45e29b9125c2ab565b5526442437686
Եթե այժմ ավելացնեք ձեր սեփական բիզնեսի տրամաբանությունը, ապա ցանկանում եք օգտագործել ուղտի տակի (ստորին) նշումը:
b45e29b9125c2ab565b5526442437686
Մենք ուզում ենք ստանդարտացնել երկու տարբերակների շարահյուսությունը: Դա անելու համար մենք ավելացնում ենք __ զանգի կախարդական մեթոդը ConvenienceModel- ին:
b45e29b9125c2ab565b5526442437686
Այս զանգը հնարավոր է նաև վերը նշված օրինակում:
b45e29b9125c2ab565b5526442437686
Ստուգեք դատարկ առարկաները
Եթե ցանկանում եք դուրս բերել երկրի անունը անձնական հասցեի համար, հաճախ տեսնում եք հետևյալ կոդը:
b45e29b9125c2ab565b5526442437686
Դա կանխելու համար մենք ներառում ենք stringhelper գրադարանը և վերադարձնում ենք դատարկ դասի հատուկ օբյեկտ, եթե մոդելը չի գտնվել::
b45e29b9125c2ab565b5526442437686
Սա նշանակում է, որ զանգը հաջող է (այս օրինակում, եթե ինչ-որ բան հայտնաբերվի, երկրի անունը դուրս է բերվում, մնացած բոլոր դեպքերում դատարկ տող):
b45e29b9125c2ab565b5526442437686
Եթե մենք նաև ուզում ենք լուսաբանել այն դեպքը, երբ ID 42 ունեցող օգտվողը կարող է նույնիսկ գոյություն չունենալ, մենք նաև դրա համար կկառուցենք օգնականի փոքր գործառույթ::
b45e29b9125c2ab565b5526442437686
Հետևյալ զանգը այսպիսով տալիս է դատարկ տող, նույնիսկ եթե օգտագործողն ընդհանրապես գոյություն չունի:
b45e29b9125c2ab565b5526442437686
Հարմարավետորեն անցեք n: m հարաբերությունները
Վերջապես, մենք ուզում ենք պարզեցնել հետևյալ կոդը:
b45e29b9125c2ab565b5526442437686
Դրա համար մենք օգտագործում ենք հարմարեցված հավաքածուների հնարավորություն: Մենք նախ ընդլայնում ենք հարմարության մոդելը:
b45e29b9125c2ab565b5526442437686
Այնուհետև մենք ստեղծում ենք ֆայլի հավելված\Helpers\ConvenienceCollection.php , որը երաշխավորում է, որ հավաքածուների համար անհայտ գործառույթներ կանչելը կատարում է գործառույթը հավաքածուի բոլոր տարրերի համար::
b45e29b9125c2ab565b5526442437686
Այսպիսով, մենք կարող ենք օգտագործել հետևյալ ծածկագիրը `բոլոր երկրների բոլոր անունները դուրս բերելու համար` անձի բոլոր ծնողների հասցեները:
b45e29b9125c2ab565b5526442437686
Բայց հետևյալի նման զանգեր նույնպես հնարավոր են:
b45e29b9125c2ab565b5526442437686
Դասավորել ըստ բազմաթիվ սյունակների
Հետևյալ զանգը տեսակավորում է միայն ըստ գտնվելու վայրի , թեև դա հավանաբար ցանկալի չէր:
b45e29b9125c2ab565b5526442437686
Մի քանի սյունակների տեսակավորումն ապահովելու համար մենք ընդլայնում ենք մեր հարմարավետության հավաքածուն:
b45e29b9125c2ab565b5526442437686
Դրանով մենք կարող ենք հավաքածուն դասավորել ըստ մի քանի սյունակների հետ:
b45e29b9125c2ab565b5526442437686
Ստանդարտ տեսակավորում
Մենք ընդլայնում ենք ConvenienceCollection- ը `մեկ այլ օժանդակ գործառույթով:
b45e29b9125c2ab565b5526442437686
Այժմ յուրաքանչյուր մոդելի կարող եք տալ անհատական ստանդարտ տեսակավորման գործառույթ:
b45e29b9125c2ab565b5526442437686
Այսպիսով, մենք կարող ենք տեսակավորել հավաքածուն:
b45e29b9125c2ab565b5526442437686
Օբյեկտների անուններ
Յուրաքանչյուր մոդել իրականացնում է getLabel մեթոդը (getName- ը տատանվում է `կախված մոդելից):
b45e29b9125c2ab565b5526442437686
Դրանով դուք կարող եք արագ և հեշտությամբ ցուցադրել օբյեկտի անունը: Դրանից հետո դուք կարող եք իրականացնել sortByLabel օգնականի մեթոդը ConvenienceCollection- ում:
b45e29b9125c2ab565b5526442437686
Դատարկ արդյունքներ
Եթե միջանկյալ քայլը դատարկ է, Laravel- ի գործառույթները առաջին () և վերջին () սովորաբար վերադառնում են զրոյի: Այդ պատճառով մենք ներմուծում ենք getFirst () և getLast () այնպես, որ հետևյալ զանգը միշտ հաջողվի:
b45e29b9125c2ab565b5526442437686
Այսպիսով, մենք հետ ենք վերադարձնում __ դատարկ_ օգնական, որը __x- ն ճանաչում է:
b45e29b9125c2ab565b5526442437686