04 Sorteren en selecteren in het overzicht
Inleiding
We gaan een eigen overzicht maken. We beginnenverder met het aanmakenoverzicht van een menu, dan maken we een controller, en van de controller gaan we naar de view. We leren data op te halen met de controller en deze te tonen in onze eigen view.
Het ophalen van data doen we met een eenvoudige query diedat we in de Controllervorige plaatsen.les Vanuithebben degemaakt.
We gaan wenu viaonze heteigen Modelquery's naartoe devoegen database. De volgorde wordt:
In deze lesen maken we dus het hele 'rondje'. Dit is een standaardgesorteerd 'rondje'overzicht datvan inalle elkekleine applicatieEuropese vaak terug zal komen.landen.
Wat leren we?
we leren werken met het MVC modelwe gaan leren hoe je een eigen overzicht kan maken.- we leren hoe je met Yii op vershillende manieren data uit de database kan halen
- we leren hoe je zelf met Yii de gegevens gesorteerd kan afdrukken.
- we leren hoe we via een query een selectie kunnen maken.
Menu
Om te beginnen maken we een nieuwe method (=functie) in de controllers/CountryController class.
De function/method returned "oops" en doet verder niets.
Deze controller noemen we actionOverzicht. Volgens de routing regels wordt de route wordt dus /country/overzicht.
Opdracht 3a
|
Inleveren
Een schermafdruk van jouw gehele browser (url moet zichtbaar zijn) waarin je het via het menu naar jouw overzicht gaat en waar "oops" wordt afgedrukt.
Controller
We halen onze "oops" weg en gaan dus een stukje code toevoegen aan onze CountryController.
De controller komt er als volgt uit te zien.
Let op zet jouw naam op regel 3.
public function actionOverzicht()
{
// zet hier jouw naam
// dit is de query, dit is te vergelijken met select * from Country
$countries=Country::find()->all();
// de view wordt aangeroepen en het object $countries en $pagination wordt meegegeven.
return $this->render('overzicht', [
'countries' => $countries,
]);
}
Opdracht 03b
|
Inleveren
CountryController.php
View
What? Een fout? Waarom nu?
We gaan dus in de folder views/country een nieuwe file overzicht.php aanmaken en plaatsen daar de volgende code in.
<?php
foreach ($countries as $country) {
echo $country->Name;
echo " - ";
echo $country->Code;
echo " - ";
echo number_format($country->Population, 0, ',', ' ');
echo "<br>";
}
?>
Opdracht 03c
|
Het overzicht is bijna niet geformatteerd.
Weet je nog hoe een HTML table er uit ziet?
<table>
<tr>
<td> .. </td>
<td> .. </td>
<td> .. </td>
</tr>
<tr>
<td> .. </td>
<td> .. </td>
<td> .. </td>
</tr>
</table>
Hierboven staat een skelet van een table met twee rijen en drie kolommen.
Vind je dit lastig? Kijk dan de video.
|
Je hebt nu zelf een view opgebouwd zonder gebruik te maken van de Gridview widget. Het kost meer tijd en moeite om zelf een overzicht zonder Gridview widget te maken, maar je hebt wel veel meer controle over hoe jouw overzicht er uit komt te zien.
Inleveren
Jouw aangepaste en werkende view/country/overzicht.php
Sorteren en selecteren
Via de Yii Gridview widget hebben we geleerd dat we eenvoudig kunnen sorteren en selecteren. De Yii Gridview heeft ook beperkingen. Je kunt bijvoorbeeld niet alle landen zoeken met meer dan X inwoners. Soms wil je ook dat de gebruiker zelf niet kan selecteren. Hij krijgt dan niet alle regels uit de tabel te zien, maar bijvoorbeeld alleen de regels met de datum van vandaag.
We gaan het sorteren en selecteren via de controller coderen.
Kijk nog eens naar de CountryController bij de actionOverzicht, daar staat:
$countries=Country::find()->all();
Dit statement kijkt naar het object Country dat in het model is gemaakt en zoekt dan naar alle regels uit dit object. Dit object wordt in het model gekoppeld aan de tabel country.
Yii vertaald dit naar de query
SELECT * FROM country
We kunnen nog veel meer, kijk maar eens naar het volgende uitgebreide voorbeeld:
$countries = country::find()->where(['Continent' => 'Europe'])->orderBy(['Name' => SORT_ASC])->all();
Hier worden alle countries geselecteerd met Continent=Europe, gesorteerd op Name.
Dit is een soort Yii query; een query in Yii-formaat.
Het SQL-statement zou er zo uit zien:
SELECT * FROM country WHERE Continent = 'Europe' ORDER BY Name ASC
Vind je een query eenvoudiger? OK dat kan ook.
$sql=SELECT * FROM country WHERE Continent = 'Europe' ORDER BY Name ASC";
$result = Yii::$app->db->createCommand($sql)->queryOne();
// Dit is hetzelfde als
$countries = country::find()->where(['Continent' => 'Europe'])->orderBy(['Name' => SORT_ASC])->all();
Op deze manier kun je dus via de code in de controller een selectie maken en de sortering aanpassen. In de volgende opdracht komt dit terug.
Opdracht 3d4a
Name en Surface Area
|
Je hebt geleerd dat je een overzicht kan maken via een (Yii-)query. Met de query kan je de selectie en sortering aanpassingen. De query wordt geplaatst in de controller en maakt gebruik van het model. In dit voorbeeld het model van country.
Inleveren
- Jouw aangepaste en werkende view/country/overzicht.php in tabel vorm, en
- Een schermafdruk yii-
03d-04a-jouw-naam van jouw gehele browser waarin je je overzicht laat zien.
Opdracht 3e4b
Pas het overzicht van de vorige opdracht aan zodat je alleen alle kleine Europese landen ziet. Een land is klein als
Je hebt dus te maken met twee zoekcriteria. |
Inleveren
- Jouw aangepaste en werkende countryController.php
--