0

Je développe une application web pour une galerie d'art, et je veux vérifier que j'ai correctement configuré le modèle de données. J'ai une table people et une table artists. Certains des people sont artists et d'autres non. J'ai également une table products et chaque product appartient à un artist.Associations de modèles et modélisation de données

Voici une version simplifiée des tableaux:

products 
******** 
id 
title 
artist_id 

artists 
******* 
id 
profile 
rating 
person_id 

people 
****** 
id 
first_name 
last_name 

Je dois être en mesure de récupérer le nom de l'artiste lors de l'exécution de la méthode find() sur le modèle Product. Est-ce que j'ai configuré le modèle de données correctement et si oui quelle est la meilleure façon de récupérer le nom de l'artiste sans avoir beaucoup de données non désirées?

+0

Quel est le but de la table "people"? Quel est le rôle des personnes qui ne sont pas des artistes dans votre application? – dhofstet

Répondre

3

Il est possible d'utiliser bindModel de CakePHP & unbindModel pour construire des relations qui ne reposent pas sur la bonté automagique de Cake.

Puisque vous étiez intéressé à faire la découverte sur le modèle de produit, je reproduis un exemple qui peut être appelé à partir des produits contrôleur:

// unbind Artist 
$this->Product->unbindModel(array(
    'belongsTo' => array('Artist') 
)); 

// bind Artist & Person using explicit conditions 
$this->Product->bindModel(array(
    'hasOne' => array(
    'Artist' => array(
     'foreignKey' => false, 
     'conditions' => array('Artist.id = Product.artist_id') 
    ), 
    'Person' => array(
     'foreignKey' => false, 
     'conditions' => array('Person.id = Artist.person_id') 
    ), 
) 
)); 

// return the person 
$person = $this->Product->find('first', array(
    'conditions' => array(
    'Product.id' => 1 // or any other condition 
), 
    'fields' => array(
    'Person.first_name', 
    'Person.last_name' 
) 
)); 

Qu'est-ce qui se passe ici?

Tout d'abord, nous UNBIND le produit relation de modèle avec le modèle de l'artiste .

Deuxièmement, nous lient l'Artiste et modèles Personne en définissant explicitement les relations et la désactivation des connexions forigenKey automatique de gâteau.

Enfin, nous faisons une « première » trouver sur le modèle de produit et ne demande le « prenom » & « Last_Name » de la personne .

-1

Chaque « produit » appartient à un « artiste » et chaque « Artiste » hasAndBelongsToMany « produit » Vous aurez également besoin du tableau suivant:

artists_products 
**************** 
id 
product_id 
artist_id 

http://book.cakephp.org/#!/view/1044/hasAndBelongsToMany-HABTM

+0

Artiste 'hasMany' Produit. Une relation 'hasAndBelongsToMany' n'est pas requise ni la table – Leo

Questions connexes