cakephp 3更深层次的联想

时间:2015-08-29 21:51:46

标签: associations cakephp-3.0

我试图找到合适的方式来处理下一个表格设置。

产品是我的主表并包含一个id。 UsersCarts有一个字段product_id和belongsTo它也加载产品。

到目前为止没问题。我还有一个表ProductsNettoDeals,我存储可能的netto价格。在productcontroller中加载产品时,此表具有自己的id和hasOne关系的product_id。

当我加载UsersChart时,它加载了belongsTo产品,但我也希望与表ProductsNettoDeals关联,但是这个表通过id(products.id = products_netto_deals.product_id)与产品连接。我找不到查询构建器的正确语法或关联。到目前为止我所拥有的:

// 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&#39 ;.此字段指示记录是否处于活动状态且应加载。 products_netto_deals表格中存在相同的字段,表示netto价格是否有效。

错误:SQLSTATE [23000]:完整性约束违规:1052列'活动' in where子句不明确

任何人都可以指出我正确的方向,正确的关联方式和错误警告。谢谢你。

1 个答案:

答案 0 :(得分:0)

CakePHP使用连接来获取关联,以加快信息检索过程。这意味着当在不同的表中重复列名称时,您需要在查询子句中为列名添加前缀"

而不是:

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

执行:

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