Requête BDD avec jointure


(Yann) #1

Bonjour,

Je débute sur YiiFramework et je galère un peu à afficher le résultat d’une requête avec jointure.

Mon but consiste à afficher toutes les tablettes que l’utilisateur possède.

Dans mon modèle j’ai les tables Tablette et Client. Dans la table Tablette il y a une clef étrangère pointant vers le client qui la possède.

Dans mon controller voici mon code:




public function displayTablettesUser()

    {

    	$user_id = Yii::$app->user->getId();


    	$var_tablette = Tablette::find()->where(['ID_fk_client' => 'user_id']);

    

    	// Send toutes les tablettes du client

    	return $this->render('profile', array('tablettes' => $var_tablette));

    }



Et voici mon code pour afficher les tablettes de l’utilisateur courant:




<?php


use yii\helpers\Html;

use yii\bootstrap\Nav;

use yii\bootstrap\NavBar;

use yii\widgets\Breadcrumbs;

use app\assets\AppAsset;


AppAsset::register ( $this );

echo "hola";

echo "<br/>";

echo "<br/>";


foreach($tablettes as $tablette){

	echo($tablette->code)." : ".$tablette->iDFkClient->firstName."</br>";

}




?>



Seulement lorsque je vais sur ma page j’obtiens cette erreur : Trying to get property of non-object.

J’ai du mal à comprendre via yii sans passer directement par des requêtes SQL.

Merci à vous.


(Louisgac Development) #2

tu dois utiliser les relations.

dans le modèle user, définis une relation hasTablettes. ensuite, si $user est ton utilisateur, tu n’auras qu’à faire $user->tablettes pour accéder à toutes les tablettes de l’utilisateur.

Je te conseille de lire la doc au sujet de l’Active Record, en particulier les paragraphes sur les relations :

http://www.yiiframework.com/doc-2.0/guide-db-active-record.html

Sinon, pour ta requête spécifique, tu as oublié le "all" :


 $var_tablette = Tablette::find()->where(['ID_fk_client' => 'user_id'])->all();

http://www.yiiframework.com/doc-2.0/yii-db-activerecord.html#find()-detail

Mais vraiment, apprend à utiliser l’ORM de yii, cela te fera gagner beaucoup de temps à l’avenir.


(Yann) #3

Ok je vais lire ça desuite merci beaucoup Louis !


(Louisgac Development) #4

de rien.

Je te conseille de lire toute la doc de yii2 : elle est pas si longue, et ça fait du bien.

essaye de suivre un ou deux tutos complet aussi. au final : tu gagneras du temps


(Angelhog) #5

Bonjour

Jai une question normalement plutфt simple.

Jai donc une table dans ma BDD avec 2 colonnes "id_rival" et "id_perso"

Je souhaite rйcupйrer le contenue de la table, lassigner а smarty pour ensuite afficher une liste grвce а une boucle dans smarty.

REQUETE :

req = Db::getInstance->ExecuteSELECT FROM mtet_perso;

Dois-je faire un mysql_fetch_array ?

Pourriez vous me faire le code smarty de la boucle qui affiche quelque chose du genre :

<li> id perso : x id_rival : x </li>

<li> id perso : x id_rival : x </li>

<li> id perso : x id_rival : x </li>

Merci beaucoup davance