Հնարքներ Լարավելի խոսուն հարաբերությունների համար

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

Վերադառնալ