Slide 1

Slide 1 text

Laravel ޻࡞๥ ࢖༻ Eloquent ORM shengyou @ জࢣେࢿ޻ܥላ။ (2014.12.07)

Slide 2

Slide 2 text

֊ஈ೚຿ • ላश Eloquent ORM త࢖༻ํࣜɼྃղ Laravel ૢ࡞ࢿྉݿతํ๏ • ላश೗Կ࢖༻ artisan tinkerɺdd() ౳޻۩ ိڠॿଌࢼ Model ఔࣜᛰ

Slide 3

Slide 3 text

࢖༻ Eloquent ORM

Slide 4

Slide 4 text

ॄኄੋ ORMʁ • ORM = Object-relational mapping • ؆ᄸိ㘸ɼबੋ೺ࢿྉݿཫҰචҰචతࢿ ྉᏓ੒෺݅ိૢ࡞ɻṜࠣ෺݅ಁա៺ঝՄ Ҏ⃧Ճߋଟతํ๏ɼᩋࢿྉݿతૢ࡞ (CRUD) ߋՃ௚᧷ɺํศ

Slide 5

Slide 5 text

ҝॄኄཁ༻ ORMʁ • ݪຊࡏሜࢿྉݿ查ᨑ࣌ɼԟԟधཁࣗߦґ রधٻḤሜ SQL 查ᨑࣜɼᙛ查ᨑࣜᏓ ௕ɺ᮫࿆೔਼ෳᯑ࣌ɼ኷೉௚᧷ྃղ֘查 ᨑࣜత࡞༻ • ࣗߦ႔ཧ SQL 查ᨑࣜ࣌ɼ໵ध֬ೝ༌ೖ తࣈ۲ੋ൱౎༗ Escape Ҏ๷҆શੑྀٙ

Slide 6

Slide 6 text

Model ׳ྫ • Laravel త૬᮫׳ྫෳश - Ұݸ resource ሣጯ౸ DB ཫతҰݸ table - Ұݸ model ሣጯ౸ table ཫతҰݸ row - table ໊᜝༻ෳᏐʀ model ໊᜝༻ᄸᏐ - ኺࢿྉදऔग़ိత౦੢ੋ Collectionɼ Մᙛ ਞྻ(array) ࢖༻

Slide 7

Slide 7 text

tinker খ㢨ख • PHP ຊ਎༗㚎ݐޓಈࢦྩ (REPL) ໛ࣜɼ Մ༻ php -a ਐೖɼՄࡏଖதଌࢼఔࣜᛰ • tinker ଇੋ Laravel ఏڙత artisan ࢦྩɼআ ྃਐೖ PHP త REPL ໛ࣜ֎ɼՃࡌ Laravel ॴ༗෺݅؀ڥɼՄᩋզ၇ࡏଖதଌࢼ Laravel తఔࣜᛰ ˒ tinker 㘸໌ɿhttp://laravel-recipes.com/recipes/280/interacting-with-your-application

Slide 8

Slide 8 text

artisan tinker • ਐೖ PHP ޓಈ໛ࣜɼฒࡌೖ Laravel ؀ڥ - ՄҎ௚઀ࡏࢦྩ໛ࣜԼૢ࡞ Laravel ֤ݩ ݅ɼଌࢼఔࣜሜ๏ - ཁ݁ଋ੥༻ exit; ࢦྩ • ൣྫɿ $  php  artisan  tinker [1]  >  exit; ˒ ༝ԙ tinker ૬ґత extension pcntl ࡏ Windows ্ᔒ༗መ࡞ɼҼࠑແ ๏શޭೳࢧԉ tinker ޭೳɿhttp://php.net/manual/en/pcntl.installation.php

Slide 9

Slide 9 text

dd() ଌࢼ޻۩ • Laravel 㚎ݐҰݸ debug ีॿവࣜɿdd() - ଖመबੋ೺ᏓᏐ㟚ਐ var_dump ޙ exit - ՄҎࡏ೚Կ஍ํ࢖༻ɼଌࢼఔࣜᛰྲྀ ఔɺᬓाɺྃղ෺݅㚎༰ • ൣྫɿ $post  =  Post::find(1); dd($post); ˒ dd() 㘸໌ɿhttp://laravel.com/docs/4.2/helpers#miscellaneous

Slide 10

Slide 10 text

৽⃧ࢿྉ • ࢖༻ new ݐߏࣜ - ௚઀࢖༻ new ݐߏࣜ㗞ੜ Model መᱪɼ ࠶ଘ䈕 • ൣྫɿ $post  =  new  Post; $post-­‐>title  =  ‘My  Title’; $post-­‐>save();

Slide 11

Slide 11 text

৽⃧ࢿྉ • create($array); - ኺਞྻ৽⃧ࢿྉɼਞྻత key 值ࣗಈሣ ጯ౸ࢿྉදతཝҐ • ൣྫɿ $post  =  Post::create($input);

Slide 12

Slide 12 text

Mass Assignment • Laravel త ORM ՄҎ௚઀༻ Mass Assignment తํࣜ௚઀৽⃧ࢿྉɼޠ๏؆ ܿɺշ଎ํศɼୠ༗Մೳ။༗҆શੑ໰୊ • ࡏ generator 㗞ੜత Model ཫɼfillable త ሱੑबੋࡏઃఆ䬟ࠣཝҐՄҎ࢖༻ Mass Assignment ၏ҝ๷ڔखஈ ˒ ׭໢จ݅ɿhttp://laravel.tw/docs/4.2/eloquent#mass-assignment

Slide 13

Slide 13 text

Mass Assignment ܯࣔ

Slide 14

Slide 14 text

ઃఆ fillableɺguarded • ࡏ Model 㚎ઃఆ fillable ሱੑɼࢦఆ䬟ࠣཝ ҐՄҎಁա Mass Assignment ိሜೖ/ߋ৽ ࢿྉ • guarded ଇੋ૬൓తሱੑɼઃఆޙՄҎอ ޢಛఆཝҐෆ࢖༻ Mass Assignment • ൣྫɿ protected  $fillable  =  [‘title’,  ‘content’,  ‘category_id’]; protected  $guarded  =  [‘id’,  ‘password’];

Slide 15

Slide 15 text

႟আࢿྉ • delete(); - ઌऔग़ Model መᱪޙɼ࠶႟আ • ൣྫɿ $post  =  Post::find(1); $post-­‐>delete();

Slide 16

Slide 16 text

႟আࢿྉ • destroy($id); - ႟আҰචࢿྉɼ࢖༻ primary key • destroy([1, 2, 3]); - ႟আଟචࢿྉɼ࢖༻ array ၚ值 • destroy(1, 2, 3); - ႟আଟචࢿྉɼ࢖༻ଟჩᏐၚ值

Slide 17

Slide 17 text

ߋ৽ࢿྉ • save(); • ઌऔग़ Model መᱪޙɼ࠶਑ሣሱੑߋ ৽ɼશ෦׬੒ޙ࠶ଘ䈕 • ൣྫɿ $post  =  Post::find(1); $post-­‐>title  =  ‘My  New  Title’; $post-­‐>save();

Slide 18

Slide 18 text

ߋ৽ࢿྉ • update($array); - ኺਞྻߋ৽ࢿྉɼਞྻత key 值ࣗಈሣ ጯ౸ࢿྉදతཝҐ • ൣྫɿ $post  =  Post::find(1); $post-­‐>update($input);

Slide 19

Slide 19 text

查ਘࢿྉ • all() // औग़શ෦ࢿྉ • find($id); // ࢖༻ primary key • where(‘ཝҐ’, ‘ᑍ݅’, ‘值’); • orderBy(‘ཝҐ’, ‘ഉংํࣜ’); • get(); // ճၚ Collection • first(); // ճၚ Model

Slide 20

Slide 20 text

Collection ஞචऔग़ • ኺ Model 查ᨑత݁ՌɼEloquent ။ճၚҰ ݸ Collectionɼଖߦҝब૾ਞྻҰᒬɼՄ Ҏࢧԉ༻ foreach औग़ࢿྉ • ൣྫɿ $posts  =  Post::all();  //  $posts  ੋ  Collection foreach($posts  as  $post) {        echo  $post-­‐>title;  //  $post  ੋ  Model }

Slide 21

Slide 21 text

ಛҟޭೳ • paginate($per_page); - ґઃఆతචᏐࡏ Query 㚎Ճ Limit ޠ ๏ɼࡏ view ্Մࣗಈࢧԉ෼ท • random($num); - ኺ Collection ᬋػऔग़ n චࢿྉ

Slide 22

Slide 22 text

ߋଟ ORM ૢ࡞ํࣜ • ׭ํจ݅ - http://laravel.tw/docs/4.2/eloquent#insert- update-delete • Collection ༻๏ - http://jenssegers.be/blog/51/laravel- collections-are-awesome

Slide 23

Slide 23 text

ଘ䈕ᴍ • ࢼஶ೺ݱࡏቮៃՄҎӡ࡞తఔࣜᛰՃೖ൛ ຊ߇੍㚎 • ྲྀఔఏ੧ɿ - working directory > staging area > commit

Slide 24

Slide 24 text

ࢿྉද᮫࿆

Slide 25

Slide 25 text

ࢿྉදؒత᮫࿆

Slide 26

Slide 26 text

Model ࢿྉ᮫࿆ • ࡏ Model 㚎ఆٛଖᢛଖଞ Model ؒత᮫࿆ ྨܕ Eloquent ब။ࣗಈሡṜݸ᮫࿆Ꮣ੒෺ ݅ؒతሱੑɼࣕແधࣗߦԼ SQL ޠ๏ • ൣྫɿ public  function  {㠥Ұݸ  Model  త໊᜝(ᄸ/ෳᏐ)}() {        return  $this-­‐>{᮫࿆ྨܕ}(‘{Model  ໊᜝}’); }

Slide 27

Slide 27 text

᮫࿆ྨܕ • belongsTo(‘Model’); - ᓤሱԙ㠥Ұݸ Model • hasMany(‘Model’); - ༴༗ଟݸ Model ˒ ᮫࿆ྨܕৄࡉ㘸໌ɿhttp://laravel.tw/docs/4.2/eloquent#relationships

Slide 28

Slide 28 text

ࢿྉ᮫࿆ઃఆ Post ᮫࿆ઃఆ

Slide 29

Slide 29 text

ࢿྉ᮫࿆ઃఆ Category ᮫࿆ઃఆ

Slide 30

Slide 30 text

ࢿྉ᮫࿆ઃఆ Comment ᮫࿆ઃఆ

Slide 31

Slide 31 text

Model 㚎औ༻᮫࿆ • ೺ࢿྉؒత᮫࿆༻෺݅తํࣜڈࢥߟɼଈ Մಁա Model తሱੑ值ڈऔಘ᮫࿆ޙతࢿ ྉ㚎༰ • ൣྫɿ $post  =  Post::find(1); echo  $post-­‐>category-­‐>name; foreach($post-­‐>comments  as  $comment) {        echo  $comment-­‐>content; }

Slide 32

Slide 32 text

ଘ䈕ᴍ • ࢼஶ೺ݱࡏቮៃՄҎӡ࡞తఔࣜᛰՃೖ൛ ຊ߇੍㚎 • ྲྀఔఏ੧ɿ - working directory > staging area > commit

Slide 33

Slide 33 text

֊ஈᒾ查ද • ࡏ routes.php 㚎ଌࢼ Eloquent ORM ༻๏ త get request نଇᏐݸ • ࡾݸ Model 㚎౎༗ሣጯత᮫࿆ᬓाઃఆ

Slide 34

Slide 34 text

໰ᢛ౴ ላһՄ։࢝࿅शɺመ࡞

Slide 35

Slide 35 text

ᄸݩখ݁ • ࡏṜݸᄸݩཫɼզ၇㘸໌ላश೗Կ࢖༻ Eloquent ORM ਐߦࢿྉૢ࡞ɼฒኺ tinker ٴ route 㚎ྃղૢ࡞݁Ռ • ԼҰݸᄸݩɼզ၇ሡላश Laravel తྲྀఔ ႔ཧٴ Route ઃఆ