Soort Model net als dat van Laravel
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?
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.
Ik ken Laravel nauwlijks, maarrr ... met * de omgekeerde weg die je bewandeld hebt om vanuit je tabelnaam een class-naam te genereren.
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)
1
2
3
4
5
6
7
8
9
10
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();
}
}
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
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.
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'.
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).
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
https://github.com/illuminate/database
Zal waarschijnlijk het "composer require illuminate/database" commando zijn om het binnen je project te krijgen.
Volgens mij is de eloquent ook als package buiten Laravel te gebruiken, kijk eens naar: Zal waarschijnlijk het "composer require illuminate/database" commando zijn om het binnen je project te krijgen.
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