2015-08-29 48 views
0

我試圖找到正確的方式來處理下一個tabel設置。cakephp 3更深的協會

產品是我的主表,幷包含一個ID。 UsersCarts有一個字段product_id和belongsTo它也加載產品。

到目前爲止沒有問題。我還有一個ProductsNettoDeals表,我可以存儲可能的netto價格。該表具有它自己的id和productOid,用於在productcontroller中加載產品時的hasOne關係。

當我加載UsersChart時,它會加載它的belongsTo產品,但我也希望與ProductsNettoDeals表關聯,但此表通過id(products.id = products_netto_deals.product_id)與產品連接。我無法找到正確的語法或關聯的querybuilder。我到目前爲止:

// src/Model/Table/UsersCartsTable.php 
namespace App\Model\Table; 

use Cake\ORM\Table; 
use Cake\ORM\Query; 
use Cake\Validation\Validator; 

class UsersCartsTable extends Table 
{ 

public function initialize(array $config) 
{ 
    $this->addBehavior('Timestamp'); 
    $this->belongsTo('Products'); 
    $this->belongsTo('ProductsNettoDeals'); 
} 

public function validationDefault(Validator $validator) 
{ 
    return $validator 
     ->notEmpty('user_id', 'A user id is required') 
     ->notEmpty('product_id', 'A product id is required'); 
} 

public function findCart(Query $query, array $options) 
{ 
    $query 
    ->where([ 
    'user_id' => $options['user_id'], 
    //'active' => '1' 
    ]) 
    ->contain(['Products','ProductsNettoDeals']) 
    //->select(['product_id','created','products.name','products.price','products.delivery_time']); 
    ; 

    return $query; 
} 
} 

在這個設置中,我總是有這個問題,即id的匹配是錯誤的。產品很好。 users_carts.product_id與products.id鏈接,但products_netto_deals.product_id應與product.id鏈接,而不與users_carts.id鏈接。我嘗試了外鍵並綁定,但兩者都是解決方案的一部分。

除了這個問題,當連接ProductsNettoDeals關聯時,激活註釋的active =>'1'時出現錯誤。該字段指示記錄是否處於活動狀態並應加載。 products_netto_deals表格中存在相同的字段,用於指示netto價格是否處於活動狀態。

錯誤:SQLSTATE [23000]:完整性約束違規:1052列「活躍」在where子句是曖昧

任何人都可以點我在協會的正確方法和錯誤的警告正確的方向。感謝前鋒。

回答

0

CakePHP使用連接來獲取關聯,以加快ud的信息檢索過程。這意味着,具有跨越不同的表重複列名時,您將需要查詢條款」

相反的前綴列名:

$query->where(['active' => true]); 

務必:

$query->where(['UsersCarts.active' => true])