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

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

Վերադառնալ