2017-05-31 3 views
2

Ich habe 2 Tabellen.cakephp 3 queryBuilder für assoziative Daten

Tabelle 1:

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

Tabelle 2:

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

Im payment_infos Modell

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

Ich habe diese Anfrage:

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

Bei der Ausführung der obigen Abfrage ich die folgende Fehlermeldung erhalten:

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

ersetzen ' 'classname' => 'ProductPrices'' mit'' joinType '=>' INNER''. Hast du eine Bake-Konsole benutzt, um ein Modell zu erstellen? Was willst du erreichen? – Sam

Antwort

2

property: Der Name der Eigenschaft, die mit Daten aus der zugehörigen Tabelle in die Quelltabelle Ergebnisse gefüllt werden soll. Standardmäßig ist dies der unterstrichene Name & der Assoziation, also product_price in unserem Beispiel.

Da Sie bereits einen Feldnamen haben product_price in payment_infos es einen Konflikt erzeugen, änderte ich den Standard-Eigenschaftennamen in einen benutzerdefinierten Namen.

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

Siehe BelongsTo Associations