CakePHP 3 - 通过其他表连接?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CakePHP 3 - 通过其他表连接?相关的知识,希望对你有一定的参考价值。

我正在尝试创建以下数据库结构:

enter image description here

http://www.databaseanswers.org/data_models/generic_pos/index.htm

具体来说,我正在寻找以下关系:

  • sales_transaction
  • products
  • products_in_transaction

我想要关系设置,以便我可以调用sales_transaction数据库,然后只包含products,并在1个查询中获取所有内容。但是,它只是工作,所以请帮助我:-)

这是我的代码:

SalesTransactionTable

public function initialize(array $config)
{
    parent::initialize($config); // TODO: Change the autogenerated stub

    $this->hasMany('Products', [
        'through' => 'ProductsInTransaction'
    ]);
}

ProductsTable

public function initialize(array $config)
{
    parent::initialize($config); // TODO: Change the autogenerated stub

    $this->belongsToMany('SalesTransaction', [
        'through' => 'ProductsInTransaction'
    ]);
}

ProductsInTransactionTable

public function initialize(array $config)
{
    parent::initialize($config); // TODO: Change the autogenerated stub

    $this->belongsTo('SalesTransaction', [
        'foreignKey' => 'transaction_id',
        'joinType' => 'inner'
    ]);

    $this->belongsTo('Products', [
        'foreignKey' => 'product_id',
        'joinType' => 'inner'
    ]);
}

从上述陈述中可以明显看出这种关系。本质上,SalesTransaction包含我的所有交易,而products_in_transaction是我与products连接的连接表,但只需查看链接即可获得完整的方案。

当我尝试运行此代码来获取它:

$sales_transactions = $sales_transactions_table->find('all', [
            'conditions' => [
                'device_id IN' => $deviceIdsInDepartment
            ],
            'contain' => [
                'Products'
            ]
        ]);

我得到这个错误:error

答案

你在hasMany模型中使用了SalesTransaction关联。

它应该是一个belongsToMany

SalesTransactionTable

$this->belongsToMany('Products', [
    'through' => 'ProductsInTransaction'
]);

以上是关于CakePHP 3 - 通过其他表连接?的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 3 连接表关联

Cakephp 3 - 使用_joinData属于ToMany

如何使用 CakePHP 3 连接多个表?

如何在 CakePHP 2 中为 3 个树状连接表保存数据

CakePHP 3.x JWT 认证服务器

在 CakePHP 3.0 的 add 方法中将附加数据保存到连接表