Yii Framework Forum: Afficher Des Données D'un Autre Model - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Afficher Des Données D'un Autre Model Rate Topic: -----

#1 User is offline   j.buchs 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 2
  • Joined: 06-February 14

Posted 06 February 2014 - 10:27 AM

Bonjour étant débutante sur Yii, je suis capable de créer des models et des cruds grâce à Gii.

Mon problème est le suivant :
Je réalise un projet de covoiturage sous yii et sur la page d'accueil j'aimerais afficher les données d'un autre model
Par exemple : Ma page d'accueil afficherait les différents trajets de covoiturage proposés par d'autres membres sous forme de liste.

J'ai donc une table users et une table rides (les trajets)

Comment afficher les données des rides sur une page différente de l'index des rides ?

Merci d'avance pour vos futures réponses que j'attends avec impatience :)

Julia Buchs
0

#2 User is offline   yannick 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 25-September 11

Posted 06 February 2014 - 10:42 AM

Bonjour Julia

Cela va fortement dépendre de comment tu souhaites afficher ces données.
Gii n'est utilisé que pour générer un CRUD, mais dès que tu veux un site un minimum évolué, il faut ajouter du code.

La première action à faire consiste à t'assurer que les relations entre les models sont bien définies (one-to-many, many-to-one, ...)

Ensuite, pour garder une structure MVC correcte, il faut que tu récupères les données qui t'intéressent dans le contrôleur, et que tu passes ces données à la vue qui va uniquement les afficher.

Pour récupérer ces données, utilise les relations définies dans les models.

cela peut paraitre vague, mais je pourrai te donner des explications plus précises si tu as un exemple plus précis (relations entre users et rides, informations des rides à afficher...)

Yannick
0

#3 User is offline   j.buchs 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 2
  • Joined: 06-February 14

Posted 07 February 2014 - 03:29 AM

Oh ! Merci pour cette réponse si rapide :)

Je vais donc essayer d'indiquer les informations que tu m'as demandé.

Voilà l'arborescence des fichiers concernés :

./models/Rides.php
./models/Users.php
La page d'index du site n'a donc pas de modèle

./views/rides/{index.php,view.php,...) Les fichiers par défaut créés lors de la création de CRUD via gii
./views/users/{index.php,view.php,...)
./views/site/index.php Le fichier où je voudrais afficher les différents rides avec leurs utilisateurs, créé par défaut par yii

Relations inscrites dans le model de rides (Il faut savoir que j'avais d'abord créé la base de données sous mysql workbench avant de l'importer dans phpmyadmin, les relations inscrites ci-dessous se sont donc générées automatiquement)
public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'comments' => array(self::HAS_MANY, 'Comments', 'rides_id'),
			'registrations' => array(self::HAS_MANY, 'Registrations', 'rides_id'),
			'ridebadges' => array(self::HAS_MANY, 'Ridebadges', 'rides_idr'),
			'rides' => array(self::BELONGS_TO, 'Rides', 'rides_id'),
			'rides1' => array(self::HAS_MANY, 'Rides', 'rides_id'),
			'towns' => array(self::BELONGS_TO, 'Towns', 'towns_id'),
			'townsId1' => array(self::BELONGS_TO, 'Towns', 'towns_id1'),
			'users' => array(self::BELONGS_TO, 'Users', 'users_id'),
		);
	}


Relations inscrites dans Users

public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'comments' => array(self::HAS_MANY, 'Comments', 'users_id'),
			'registrations' => array(self::HAS_MANY, 'Registrations', 'users_id'),
			'rides' => array(self::HAS_MANY, 'Rides', 'users_id'),
			'votes' => array(self::HAS_MANY, 'Votes', 'users_id'),
		);
	}



Voici les captures d'écran de l'application :
Page d'accueil
Attached File  covoiturage1.PNG (35.27K)
Number of downloads: 9

Page d'un rides
Attached File  covoiturage2.PNG (23.49K)
Number of downloads: 9

J'aimerais donc pouvoir afficher sous forme de tableau les différents rides présents dans la base de données sur la page de la première image. Les différentes informations que j'aimerais voir figurer dans le tableau de la page d'accueil sont par exemple le nom de l'utilisateur conducteur et différentes données à propos du trajet. Remarquez que j'ai réussi à remplacer l'id de l'utilisateur par son pseudo en passant par les relations

Voici le code que j'ai utilisé (dans ./views/rides/view.php)
$this->widget('zii.widgets.CDetailView', array(
	'data'=>$model,
	'attributes'=>array(
		'id',
		'users_id',
		array(
			'name'=>'users_id',
			'value' => $model->users->cpnvId,
			),
		'towns_id',
		'towns_id1',
		'rides_id',
		'description',
		'departure',
		'arrival',
		'seats',
		'startDate',
		'endDate',
		'day',
	),
));


Julia Buchs
0

#4 User is offline   yannick 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 25-September 11

Posted 07 February 2014 - 08:38 AM

Ok, alors tu peux déjà découper le travail en plusieurs étapes:
1) Afficher un tableau contenant les rides,
2) Ajouter les informations du user,
3) Inclure ce tableau dans la page d'index.


Etape 1:
La bonne nouvelle, c'est que Yii (ou plutôt Gii) s'est déjà chargé de l'étape 1: normalement la page "localhost/covoiturage/covoiturage/rides" doit utiliser un composant CGridView pour afficher tous les rides du site avec les informations qu'ils contiennent dans un tableau paginé et triable.

Etape 2:
Dans la vue "rides/index.php", tu as la configuration du CGridView avec la liste des colonnes. Je ne suis plus sur mais il y a de fortes chances qu'il existe déjà une colonne "users" qui contient l'id du conducteur.
Pour simplifier la compréhension par la suite, tu peux changer le nom de la relation dans le bout de code
public function relations()
        {
                // NOTE: you may need to adjust the relation name and the related
                // class name for the relations automatically generated below.
                return array(
                        'comments' => array(self::HAS_MANY, 'Comments', 'rides_id'),
                        'registrations' => array(self::HAS_MANY, 'Registrations', 'rides_id'),
                        'ridebadges' => array(self::HAS_MANY, 'Ridebadges', 'rides_idr'),
                        'rides' => array(self::BELONGS_TO, 'Rides', 'rides_id'),
                        'rides1' => array(self::HAS_MANY, 'Rides', 'rides_id'),
                        'towns' => array(self::BELONGS_TO, 'Towns', 'towns_id'),
                        'townsId1' => array(self::BELONGS_TO, 'Towns', 'towns_id1'),
                        '[color="#0000FF"][b]conducteur[/b][/color]' => array(self::BELONGS_TO, 'Users', 'users_id'),
                );
        }

Comme cela, tu pourras accéder directement aux infos de cet utilisateur directement depuis un ride associé:
$monRide->conducteur->prenom

pour avoir le prénom par exemple.

Du coup il n'y a plus qu'à dire dans la config de CGridView que c'est le prénom que tu veux afficher:
array(
    'name'=>'users_id',
    'value' => $model->conducteur->prenom,
),



Etape 3:
La il y a plein de solutions qui vont dépendre de la suite que tu comptes donner à ton projet:
- Redirection Apache
- Utiliser l'urlManager de Yii

Mais bon on sort du sujet

Voila, bon courage et bon amusement avec Yii.

Yannick
1

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users