Data uit database
Sinds kort begin ik meer OOP ervaring op te doen, maar nu vraag ik me iets af.
In mijn database heb ik een tabel klant:
- klantnummer
- voornaam
- achternaam
- ...
Nu heb ik deze data nodig, in mijn class.
Code (php)
En hoe vullen jullie dit op? Met setters per attribuut?
Of rechtstreeks ($this->klantnr = $klantnr;) ?
Diov
Het makkelijkste met doctrine is om eerst een entity aan te maken. Hierbij hoef je helemaal geen methods te schrijven maar enkel de properties en daarbij de annotations. Hieronder een klein voorbeeldje waarin ik met wat commentaar wat opmerkingen erbij gezet heb.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
use Doctrine\ORM\Mapping as ORM;
/**
* Customer
*
* @ORM\Table(name="customers") // de tabelnaam in de database
* @ORM\Entity
*/
class Customer
{
/**
* @var integer // DIT ZIJN DE ANNOTATIONS. VOOR PHP IS HET COMMENTAAR EN WORDT HET DUS NIET GEBRUIKT MAAR VOOR DOCTRINE IS DIT BELANGRIJKE INFORMATIE
*
* @ORM\Column(name="id", type="integer", nullable=false) // een kolom met de naam 'id', type Integer, welke niet null mag zijn
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY") // zeg maar dat dit de primary key is
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="email", type="string", length=255, nullable=false) // een kolom met de naam 'email' van het type VARCHAR met een lengte van maximaal 255 tekens en dit veld mag niet leeg zijn
*/
private $email;
}
?>
use Doctrine\ORM\Mapping as ORM;
/**
* Customer
*
* @ORM\Table(name="customers") // de tabelnaam in de database
* @ORM\Entity
*/
class Customer
{
/**
* @var integer // DIT ZIJN DE ANNOTATIONS. VOOR PHP IS HET COMMENTAAR EN WORDT HET DUS NIET GEBRUIKT MAAR VOOR DOCTRINE IS DIT BELANGRIJKE INFORMATIE
*
* @ORM\Column(name="id", type="integer", nullable=false) // een kolom met de naam 'id', type Integer, welke niet null mag zijn
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY") // zeg maar dat dit de primary key is
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="email", type="string", length=255, nullable=false) // een kolom met de naam 'email' van het type VARCHAR met een lengte van maximaal 255 tekens en dit veld mag niet leeg zijn
*/
private $email;
}
?>
Met deze gegevens kan Doctrine zelf de class voor je uitbreiden met getters en setters. Hij voegt dus automatisch aan de hand van een opdracht van jou deze class met de methods getId(), getEmail() en setEmail(). Daarna kun je zelf nog sleutelen aan de methods naar je eigen behoeften. Ook kan Doctrine zelf de tabel aanmaken in de database maar ook records toevoegen aan de hand van één entity of een array van entities, een record verwijderen of updaten. Ook kan Doctrine Doctrine zo één of meerdere Entities voor je aanmaken met daarin de gegevens uit de database.
Voorbeeld van het ophalen van de gegevens van één klant:
(em staat voor entity-manager)
$customer is nu een instantie van de class Customer (of NULL) als de record met het id $id niet gevonden kon worden).
Hoe dit werkt:
- Doctrine zoekt naar een class / entity Customer
- Doctrine leest de annotations
- Doctrine weet nu welke tabel en wel record gevonden moet worden en leest deze uit de database
- Doctrine maakt een nieuwe instantie aan van de class Customer
- voor iedere kolom uit de database kijkt Doctrine of er een setter bestaat en roept deze dan aan.
- Uiteindelijk returned Doctrine de nieuwe instantie
Gewijzigd op 23/11/2014 22:09:56 door Frank Nietbelangrijk
Je eerste vraag naar het gebruik van arrays is daarmee de plaatselijke implementatie, binnen de class. Het doet er dan eigenlijk niet toe: gebruik wat je zelf handig vindt of wat aansluit bij de data of het object dat je modelleert.