Гроцери Цруд ПХП - Повезана и зависна кутија / падајућа комбинација

Преглед садржаја

У другом водичу смо споменули како започети развој Гроцерицруд до Цодеигнитер ПХП, даље ћемо видети како направити неколико комбиновани оквир или падајући мени међусобно су повезани и зависе један од другог.

Погледајмо комплетан пример са базом података која се зове Некретнине, структура ће бити следећа:

Структура табеле за табелу `некретнине`

 НАПРАВИ ТАБЕЛУ АКО НЕ ПОСТОЈИ `некретнина` (` пропертиид` инт (11) НОТ НУЛЛ, `усерид` инт (11) ДЕФАУЛТ НУЛЛ,` хигхдате` дате ДЕФАУЛТ '0000-00-00', `проперти ид` инт (6 ) ДЕФАУЛТ '0', `прице` децимал (10,2) ДЕФАУЛТ '0.00',` десцриптион` тект, `идпровинциа` инт (10) ДЕФАУЛТ НУЛЛ,` идлоцалити` инт (10) ДЕФАУЛТ НУЛЛ, `аддресс` варцхар ( 150) ДЕФАУЛТ НУЛЛ, `пхото` варцхар (255) ДЕФАУЛТ НУЛЛ,` аваилабле` енум ('Иес', 'Но') ДЕФАУЛТ НУЛЛ) ЕНГИНЕ = МиИСАМ АУТО_ИНЦРЕМЕНТ = 1 ЗАДЊА КАРТА = латин1; НАПРАВИ ТАБЕЛУ АКО НЕ ПОСТОЈИ `локалитети` (` ид града` инт (11) НОТ НУЛЛ, `лоцалити` варцхар (200) ДЕФАУЛТ НУЛЛ,` провинце ид` инт (11) ДЕФАУЛТ '0') ЕНГИНЕ = МиИСАМ АУТО_ИНЦРЕМЕНТ = 3604 ДЕФАУЛТ ЦХАРСЕТ = утф8; НАПРАВИ ТАБЕЛУ АКО НЕ ПОСТОЈИ `усерс` (` усерид` инт (11) НОТ НУЛЛ, `наме` варцхар (150) НОТ НУЛЛ ДЕФАУЛТ '') ЕНГИНЕ = МиИСАМ АУТО_ИНЦРЕМЕНТ = 161 ДЕФАУЛТ ЦХАРСЕТ = латин1; НАПРАВИ ТАБЕЛУ АКО НЕ ПОСТОЈИ `пропертитипе` (` пропертитипеид` инт (6) НОТ НУЛЛ, `пропертитипе` варцхар (150) НОТ НУЛЛ ДЕФАУЛТ '') МОТОР = МиИСАМ АУТО_ИНЦРЕМЕНТ = 15 ЗАДЊА КАРТА = латин1; НАПРАВИ ТАБЕЛУ АКО НЕ ПОСТОЈИ `провинцес` (` идпровинце` инт (11) НОТ НУЛЛ, `провинце` варцхар (255) ЦОЛЛАТЕ латин1_спанисх_ци ДЕФАУЛТ НУЛЛ) МОТОР = МиИСАМ АУТО_ИНЦРЕМЕНТ = 32 ЗАДОВОЉНА КАРТА = латин1 ЦОЛЛАТЕ = латин1_ 
Можемо наступити до краја пхпмиадмин дијаграм односа који ће бити следећи:

У претходном водичу смо видели како инсталирати и конфигурисати Гроцерицруд, овде ћемо креирати апликацију, креирамо контролер Инмо.пхп

 лоад-> база података (); $ тхис-> лоад-> хелпер ('урл'); $ тхис-> лоад-> модел ('гроцери_цруд_модел'); $ тхис-> лоад-> либрари ('Гроцери_ЦРУД'); } индекс јавне функције () {$ цруд = нев гроцери_ЦРУД (); $ цруд-> сет_тхеме ('флекигрид'); $ цруд-> сет_табле ('некретнине'); $ оутпут = $ цруд-> рендер (); $ тхис-> лоад-> виев ('иммолист', $ оутпут); }}?> вар13 -> 
Затим креирамо приказ који ћемо позвати Листаинмо.пхп, ЦСС и ЈКуери датотеке ће их преузети из конфигурације Гроцери Цруд стога их овде наводимо само:
 
Резултат при покретању веба у прегледачу хттп: // лоцалхост / про… ос / инмоби / Инмо /

Можемо видети да ид приказује бројеве уместо података. То је зато што табеле нису повезане да их повежу, урадићемо следеће, у контролеру испод сет_табле ћемо навести.

 $ цруд-> сет_релатион ('горелатинг', 'таблерелатинг', 'сховфиелд');
Као пример желим да прикажем корисничко име корисничке табеле, са ИД корисник из табеле некретнина мораћу да напишем следећи код:
 $ цруд-> сет_релатион ('усерид', 'усерс', 'наме');
Као резултат извршавања, видећемо да је уместо тога број у ИД корисник показује нам име.

Затим ћемо навести поља, покрајине и локалитете.

 $ цруд-> сет_релатион ('пропертитипе ИД', 'пропертитипе', 'пропертитипе'); $ цруд-> сет_релатион ('провинцијски ид', 'провинције', 'провинција'); $ цруд-> сет_релатион ('локалитет ид', 'локалитети', 'локалитет'); 
Након извршавања видећемо иди са њиховим односима:

У случају слика које морамо користити

 $ цруд-> сет_фиелд_уплоад (поље, 'пут слике');
Зато ћемо користити исти директориј сирових намирница за чување слика
 $ цруд-> сет_фиелд_уплоад ('фотографија', 'средства / отпремања / датотеке');
Иако на попису можемо приказати повезана поља и комбинације, оне нису овисне, али желимо да се при одабиру покрајине у покрајинској комбинацији комбинација локалитета аутоматски активира и испуни локалитетима те покрајине, такођер желимо тај однос се одржава када додамо својство или када га уређујемо.

Да би комбинације биле зависне, користићемо функцију повратног позива. А. позове о Повратни позив је алтернатива полиморфизму, ово је тема коју смо обрадили у другом водичу како бисмо знали како имплементирати класе:

Класе и полиморфизам са ПХП -ом

Тамо где је функцији као параметру додељена друга функција, функција нижег нивоа. А. позове може деловати када се запис дода или када се измени. Ова метода омогућава одличну поновну употребу кода.

Изјава повратног позива може бити следећа у контролеру.

 $ цруд-> цаллбацк_адд_фиелд ('назив повратног позива', низ (параметри));
У овом случају повратни позив ће бити идлоцалидад, а функција ће бити цбклоцалидадес
 $ цруд-> цаллбацк_адд_фиелд ('идлоцалидад', низ ($ тхис, 'цбклоцалидадес')); $ цруд-> цаллбацк_едит_фиелд ('идлоцалити', низ ($ тхис, 'цбклоцалитиес')); 
Затим креирамо функцију цбклоцатионс који ће бити наш повратни позив активиран када додамо или уредимо запис.
 // Повратни позив који генерише комбиновану функцију идлоцалидадес цбклоцалидадес () {// креирамо комбинацију $ цомбо = ''; $ финцомбо = ''; // Узимамо ИД својства ако га је као параметар послао урл $ идинмуеблеурл = $ тхис-> ури-> сегмент (4); // Проверавамо операцију коју радимо ако додамо или уредимо $ цруд = нев гроцери_ЦРУД (); $ стате = $ цруд-> гетСтате (); // Ако уређујемо и ИД својства није празан иф (иссет ($ идинмуеблеурл) && $ стате == "едит") {// консултујемо покрајину и тренутну локацију својства $ тхис-> дб-> селецт ('идпровинциа, идлоцалидад') -> фром ('пропертиес') -> вхере ('идинмуебле', $ идинмуеблеурл); $ дб = $ тхис-> дб-> гет (); $ ров = $ дб-> ров (0); $ провинце ид = $ ров-> покрајински ид; $ идлоцалити = $ ров-> идлоцалити; // Комбиновано учитавамо све локалитете покрајине $ тхис-> дб-> селецт ('*') -> фром ('лоцалитиес') -> вхере ('провинце ид', $ провинце ид); $ дб = $ тхис-> дб-> гет (); // Ако пронађемо ид тренутне локације, стављамо га као изабраног // у супротном настављамо учитавање других локација за сваки ($ дб-> ресулт () као $ ров): иф ($ ров-> идлоцалидад == $ идлоцалидад ) {$ цомбо. = 'идлоцалити.' "селецтед =" селецтед "> '. $ ров-> лоцале.' ';} елсе {$ цомбо. =' идлоцалити. '">'. $ ров-> лоцале. ' '; } ендфореацх; // Враћамо учитану комбинацију ретурн $ цомбо. $ Финцомбо; } елсе {ретурн $ цомбо. $ финцомбо; }} 
Затим морамо креирати функцију претраживања локација, што означавамо као функцију упита у оквиру Повратног позива:
 // Упит локалитета функција сеарцхлоцалитиес () {// Узимам ИД провинције који је урл послао као параметар при избору // покрајине из комбиноване провинције ид $ провинце ид = $ тхис-> ури-> сегмент (3); // Консултујем локалитете у складу са изабраном провинцијом $ тхис-> дб-> селецт ("*") -> фром ('лоцалитиес') -> вхере ('провинце ИД', $ провинце ид); $ дб = $ тхис-> дб-> гет (); // Додељујем скл одговор низу $ арраи = арраи (); фореацх ($ дб-> ресулт () као $ ров): $ арраи [] = арраи ("валуе" => $ ров-> идлоцалити, "проперти" => $ ров-> лоцалити); ендфореацх; ецхо јсон_енцоде ($ низ); екит; } 
Затим ћемо морати да направимо приказ који обрађује комбинације и динамички додајемо изразе јкуери.За то ћемо креирати датотеку у датотеци под називом депенд_цомбос.пхп.
 
За крај идемо на приказ и додајемо следећи код који повезује приказ са датотеком депенд_цомбос.пхп
 лоад-> виев ('зависни_комбос', $ цомбо_сетуп); }?> вар13 -> 

Затим, ако извршимо, можемо видети и када додајемо ново својство или када уређујемо како су комбинације покрајина и локалитети повезане и локалитети, то зависи од покрајине.

Ако желимо да направимо неколико зависних комбинација, мораћемо да направимо а позове за сваки пар комбинација.

Претпоставимо да имамо земље, провинције и локалитете и желимо да од зависних земаља направимо провинције и провинције са градовима, онда морамо да направимо повратни позив за сваку зависност, на пример:

 $ цруд-> цаллбацк_адд_фиелд (ид провинције, низ ($ тхис, 'цбк провинце')); $ цруд-> цаллбацк_едит_фиелд ('провинцијски ид', низ ($ тхис, 'цбк провинција')); $ цруд-> цаллбацк_адд_фиелд ('идлоцалидад', низ ($ тхис, 'цбклоцалидадес')); $ цруд-> цаллбацк_едит_фиелд ('идлоцалити', низ ($ тхис, 'цбклоцалитиес')); 
За комбиноване земље, а позове будући да је први у хијерархији, не зависи од друге комбинације.

Да ли вам се допао и помогао овај водич?Можете наградити аутора притиском на ово дугме да бисте му дали позитиван поен

Ви ће помоћи развој сајта, дељење страницу са пријатељима

wave wave wave wave wave