Soort Model net als dat van Laravel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jorn Reed

Jorn Reed

31/05/2020 15:32:10
Quote Anchor link
Hoi,

ik gebruik voornamelijk vaak Laravel omdat ik het een fijn framework vind. Graag wil ik vanaf het begin een frameworkje voor mijzelf maken, omdat ik later wat ideeën er in wil verwerken, die wat minder goed met Laravel kunnen.

Ik vroeg me af, in Laravel kan je voor elke database tabel een model maken, zeg bijvoorbeeld Products. Het maakt niet uit welke Model je aanroept in een controller, je kunt bijvoorbeeld altijd `Products::all();` doen. Omdat dat waarschijnlijk een functie is van een standaard model class waar elke model uit ge-extend wordt. Ik vroeg me dan ook af hoe werkt die `all()` functie precies. Want ik neem aan dat er een simpele SELECT * query achter zit, maar er zit geen parameter in de functie die bijvoorbeeld in het geval van `Products` de tabel `products` in de query neer zet. Kan iemand me dit uitleggen?
 
PHP hulp

PHP hulp

28/03/2024 11:58:29
 
Rob Doemaarwat

Rob Doemaarwat

31/05/2020 15:38:09
Quote Anchor link
Ik ken Laravel nauwlijks, maarrr ... met get_called_class() kun je de naam van de huidige class ophalen. Vervolgens door de molen heen halen om er je bijbehorende tabelnaam van te maken (basename(), camelCase naar under_score*, enz) en je kunt je query bouwen.

* de omgekeerde weg die je bewandeld hebt om vanuit je tabelnaam een class-naam te genereren.
 
Jorn Reed

Jorn Reed

31/05/2020 16:00:39
Quote Anchor link
Oh oke, met die methode dus er voor zorgen dat de Model naam hetzelfde is als de tabelnaam, dus dat wanneer ik een tabel products heb, moet ik dat met een lower case functie, omzetten in een functie in het basis model. Dat ik dan `Products::all()` kan doen en dat het achter de schermen de class naam Products om zet in `products`

Toevoeging op 31/05/2020 16:02:14:

Dat is toch wel tof, stel je wilt een andere functie bijvoorbeeld `findOrFail($id)` kan je nog steeds gebruik maken van een select query met de id parameter, en met behulp van die get_called_class() functie :)

Toevoeging op 31/05/2020 16:10:59:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
class Model {
   public function all(){
      $tbl = strtolower(get_called_class());
      $query=$db->prepare("SELECT * FROM :tbl");
      $query->execute([':tbl' => $tbl]);
      
      return $query->fetchAll();

   }
}
Gewijzigd op 01/06/2020 01:12:55 door Jorn Reed
 
Thomas van den Heuvel

Thomas van den Heuvel

31/05/2020 17:19:48
Quote Anchor link
Jorn Reed op 31/05/2020 16:00:39:
Er gaat even iets fout, bij het bewerken van m'n bericht toont hij het hele bericht elke voluit.

Nee, als je "snel reageert" op je eigen bericht behandelt dit forum dat als een toevoeging. Dit gaat wel goed wanneer je je eigen bericht aanpast via het edit-icoon.
 
Jorn Reed

Jorn Reed

01/06/2020 01:14:23
Quote Anchor link
heb het opgelost haha, maar zie je wat in het idee waarom ik dit topic startte? Ik zat zelf te denken aan Eloquent te includen in mijn project, maar was zelf nieuwschierig naar 'doe het zelf'.
 
Rob Doemaarwat

Rob Doemaarwat

01/06/2020 08:36:59
Quote Anchor link
Het voordeel van doe-het-zelf is dat je het precies zo kunt maken als je zelf wilt, geen "overbodige ballast" hebt, en andere rare "design keuzes" moet slikken. Het nadeel van doe-het-zelf is dat je alles zelf moet doen: elke bug "ontdekken" (dagenlang zoekwerk) en vervolgens pletten, elke feature uitwerken, elke PHP-upgrade ondersteunen, enz.

Het voordeel van de huidige gestandaardiseerde en gestructureerde manier van OO programmeren (Composer!) is wel dat je zo veel kunt hergebruiken ("lenen") als dat je zelf wilt (om op een later moment misschien alsnog "zelf" te gaan doen). De meeste frameworks komen als een set losse componenten, dus daar kun je gewoon een selectie uit maken.

Maar bovenal: "doe het zelf" blijft toch een mooie manier om iets te leren (en om later misschien ook te snappen waarom bepaalde keuzes in de "vrij verkrijgbare" oplossing zijn gemaakt, en het misschien toch helemaal niet zo'n slechte keuze was).
 
Jorn Reed

Jorn Reed

01/06/2020 14:33:24
Quote Anchor link
Ja composer zat ik ook al aan te denken. Ik zat ook al te kijken naar een eloquent dependency. Iets met Model stuff without Laravel. Maar dacht toen, als ik dat gebruik dat ik dan net zo goed Laravel zelf kan gebruiken haha
 
Marthijn Buijs

Marthijn Buijs

01/06/2020 20:01:55
Quote Anchor link
Volgens mij is de eloquent ook als package buiten Laravel te gebruiken, kijk eens naar: https://github.com/illuminate/database

Zal waarschijnlijk het "composer require illuminate/database" commando zijn om het binnen je project te krijgen.
 
Jorn Reed

Jorn Reed

02/06/2020 14:14:49
Quote Anchor link
Ja klopt die vond ik ook! Toch wil ik het zelf eens proberen, om zo een beetje kennis op te doen, wat er achter de schermen in zo'n systeem speelt haha
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.