2017-05-31 1 views
2

J'ai 2 tables.cakephp 3 queryBuilder pour les données associatives

Tableau 1:

product_prices: 
id | price |description |pack |display |created |modified | 

Tableau 2:

payment_infos: 
id |payer |pay_date |product_price_id |product_price | 

Dans le modèle payment_infos

$this->belongsTo('ProductPrices', [ 
     'foreignKey' => 'product_price_id', 
     'className' => 'ProductPrices', 
]); 

I ont cette requête:

$query = $this->find('all', [ 
     'contain' => ['ProductPrices'] 
])); 

Lors de l'exécution de la requête ci-dessus, je reçois l'erreur suivante:

Warning (512): Association property name "product_price" clashes 
with field of same name of table "payment_infos". 
You should explicitly specify the "propertyName" option. 
[CORE\src\ORM\Association.php, line 722] 
+0

remplacer ' 'className' => 'ProductPrices'' avec'' JoinType '=>' INNER''. Avez-vous utilisé la console de cuisson pour générer le modèle? Aussi, qu'essayez-vous d'accomplir? – Sam

Répondre

2

propertyName: Le nom de la propriété qui doit être rempli de données de la table associée dans les résultats de la table source. Par défaut, il s'agit du nom singulier & souligné de l'association, donc product_price dans notre exemple.

Comme vous avez déjà un nom de champ product_price dans payment_infos générer un conflit, j'ai changé le nom de propriété par défaut en un nom personnalisé.

$this->belongsTo('ProductPrices', [ 
    'foreignKey' => 'product_price_id', 
    'className' => 'ProductPrices', 
    'propertyName' => 'prod_price' 
]); 

Voir BelongsTo Associations