Ларавелдин чечен мамилелери үчүн айла-амалдар

Ларавелдин күчтүү жактарынын бири - анын көрктүү синтаксиси. Эгерде сизде Ларавелде көптөгөн моделдер жана мамилелер бар болсо (маалымат базасындагы көптөгөн таблицалардан улам), траверсинг көбүнчө анча кооз эмес код менен аякташы мүмкүн. Убакыттын өтүшү менен, үч кичинекей кеңейтүүлөр мен үчүн төмөндө кыскача тааныштыргым келген мен үчүн далилденди. Биз жөн гана кээ бир мурастарды, сыйкырдуу ыкмаларды жана бажы жыйнактарын колдонобуз.


Алгач \ ConvenienceModel.php тиркемесинин астында жаңы моделди түзөбүз:

b45e29b9125c2ab565b5526442437686

Андан кийин биз бардык ConvenienceModel үлгүлөрүнөн мураска калууга мүмкүнчүлүк беребиз:

b45e29b9125c2ab565b5526442437686

Өз функцияларыңызды мамилелер менен аралаштырыңыз

Эгер сиз байланышкан моделдерди алгыңыз келсе, анда аларды чакыруу үчүн стандарттуу синтаксисти колдоносуз:

b45e29b9125c2ab565b5526442437686

Эгерде сиз эми өзүңүздүн бизнес логикаңызды кошсоңуз, анда (төмөнкү) төө төш белгисин колдонгуңуз келет:

b45e29b9125c2ab565b5526442437686

Эки варианттын тең синтаксисин стандартташтырууну каалайбыз. Бул үчүн ConvenienceModelге сыйкырдуу __call ыкмасын кошобуз:

b45e29b9125c2ab565b5526442437686

Жогоруда келтирилген мисалда бул чалуу дагы мүмкүн:

b45e29b9125c2ab565b5526442437686

Бош нерселерди текшериңиз

Эгерде сиз өлкөнүн атын адамдын дарегине чыгаргыңыз келсе, анда төмөнкү кодду көп көрө аласыз:

b45e29b9125c2ab565b5526442437686

Мунун алдын алуу үчүн, биз кирет stringhelper китепканасын жана кайра үлгү табылган жок болсо, бош бош класска атайын объект:

b45e29b9125c2ab565b5526442437686

Бул дагы чалууну ийгиликтүү кылат (бул мисалда, бир нерсе табылса, анда өлкөнүн аталышы чыгат, калган учурларда бош сап).

b45e29b9125c2ab565b5526442437686

Эгер биз дагы ID 42 колдонуучу жок болуп калышы мүмкүн деген маселени чагылдыргыбыз келсе, анда биз бул үчүн чакан жардамчы функциясын курабыз:

b45e29b9125c2ab565b5526442437686

Колдонуучу такыр жок болсо дагы, кийинки чакыруу бош сапты берет:

b45e29b9125c2ab565b5526442437686

N: m мамилелерин ыңгайлуу кесип өтүү

Акыр-аягы, биз төмөнкү кодду жөнөкөйлөтүү келет:

b45e29b9125c2ab565b5526442437686

Бул үчүн биз бажы жыйнактарынын мүмкүнчүлүгүн колдонобуз. Алгач ыңгайлуулук моделин кеңейтип жатабыз:

b45e29b9125c2ab565b5526442437686

Андан кийин биз жыйнактарда белгисиз милдеттерин чакырып жыйноо бардык заттар үчүн милдетти аткаруусун камсыз билэ колдонмосун \ -Жок, \ ConvenienceCollection.php түзүү:

b45e29b9125c2ab565b5526442437686

Ошентип, биз төмөнкү кодду колдонуп, адамдын бардык ата-энелеринин бардык даректериндеги бардык өлкөлөрдүн аталыштарын чыгара алабыз:

b45e29b9125c2ab565b5526442437686

Бирок төмөнкүдөй чалуулар дагы мүмкүн:

b45e29b9125c2ab565b5526442437686

Бир нече тилке боюнча иреттөө

Төмөнкү чакыруу жайгашкан жери боюнча гана иреттелет, бирок ал сиз каалаган эмес окшойт:

b45e29b9125c2ab565b5526442437686

ConvenienceCollection'ту бир нече тилке боюнча сорттоону иштетүү үчүн кеңейтип жатабыз:

b45e29b9125c2ab565b5526442437686

Муну менен коллекцияны бир нече тилке боюнча иреттей алабыз:

b45e29b9125c2ab565b5526442437686

Стандарттык иреттөө

ConvenienceCollection программасын дагы бир жардамчы функция менен кеңейтип жатабыз:

b45e29b9125c2ab565b5526442437686

Эми сиз ар бир моделге өзүнчө стандарттуу сорттоо функциясын бере аласыз:

b45e29b9125c2ab565b5526442437686

Муну менен биз коллекцияны сорттой алабыз:

b45e29b9125c2ab565b5526442437686

Объекттин аталыштары

Ар бир модель getLabel ыкмасын ишке ашырат (getName моделге жараша өзгөрөт):

b45e29b9125c2ab565b5526442437686

Муну менен сиз тез жана оңой эле объектинин атын чыгара аласыз. Андан кийин sortByLabel жардамчы ыкмасын ConvenienceCollection программасында колдонсоңуз болот:

b45e29b9125c2ab565b5526442437686

Бош натыйжалар

Эгерде аралык кадам бош болсо, анда Ларавелдин функциялары адатта нөлгө айланат. Ошондуктан getFirst () жана getLast () киргизип, төмөнкү чакыруу ар дайым ийгиликтүү болот:

b45e29b9125c2ab565b5526442437686

Муну менен, __x тааныган __empty_helperди кайтарып беребиз:

b45e29b9125c2ab565b5526442437686

Артка