Data uit database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

 - Diov  -

- Diov -

23/11/2014 15:44:07
Quote Anchor link
Beste,

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
- email
- ...

Nu heb ik deze data nodig, in mijn class.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
class Klant {
    // Doen jullie dit zo?
    private $klantnr, $voornam, $achternaam, $email;

    // Of 1 variabele als array?
    private $klantData;
}

?>


En hoe vullen jullie dit op? Met setters per attribuut?
Of rechtstreeks ($this->klantnr = $klantnr;) ?

Diov
 
PHP hulp

PHP hulp

23/11/2024 13:43:33
 
Frank Nietbelangrijk

Frank Nietbelangrijk

23/11/2014 17:39:19
Quote Anchor link
In Doctrine noemen ze jouw class Klant een entity (entiteit). Een entiteit staat dan voor één record uit een bepaalde database tabel.

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
}

?>

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$customer
= $this->em->find('Customer', $id);
?>

(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
 
Ward van der Put
Moderator

Ward van der Put

23/11/2014 17:45:12
Quote Anchor link
Liever altijd aparte assessors en mutators, dus aparte methoden.

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.
 



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.