CakePHP 3-通过其他表连接?

CakePHP 3-通过其他表连接?,php,mysql,cakephp,associations,cakephp-3.x,Php,Mysql,Cakephp,Associations,Cakephp 3.x,我正在尝试创建以下DB结构: 具体而言,我正在研究以下两者之间的关系: 销售交易 产品 交易中的产品 我需要关系设置,这样我就可以调用sales\u事务DB,然后只包含产品,它在一个查询中获取所有内容。 但是,它只是不起作用,所以请帮我解决:-) 这是我的密码: SalesTransactionTable public function initialize(array $config) { parent::initialize($config); // TODO: Change

我正在尝试创建以下DB结构:

具体而言,我正在研究以下两者之间的关系:

  • 销售交易
  • 产品
  • 交易中的产品
我需要关系设置,这样我就可以调用
sales\u事务
DB,然后只包含
产品
,它在一个查询中获取所有内容。 但是,它只是不起作用,所以请帮我解决:-)

这是我的密码:

SalesTransactionTable

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

    $this->hasMany('Products', [
        'through' => 'ProductsInTransaction'
    ]);
}
public function initialize(array $config)
{
    parent::initialize($config); // TODO: Change the autogenerated stub

    $this->belongsToMany('SalesTransaction', [
        'through' => 'ProductsInTransaction'
    ]);
}
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'
    ]);
}
$this->belongsToMany('Products', [
    'through' => 'ProductsInTransaction'
]);
产品稳定

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

    $this->hasMany('Products', [
        'through' => 'ProductsInTransaction'
    ]);
}
public function initialize(array $config)
{
    parent::initialize($config); // TODO: Change the autogenerated stub

    $this->belongsToMany('SalesTransaction', [
        'through' => 'ProductsInTransaction'
    ]);
}
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'
    ]);
}
$this->belongsToMany('Products', [
    'through' => 'ProductsInTransaction'
]);
产品交易表

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

    $this->hasMany('Products', [
        'through' => 'ProductsInTransaction'
    ]);
}
public function initialize(array $config)
{
    parent::initialize($config); // TODO: Change the autogenerated stub

    $this->belongsToMany('SalesTransaction', [
        'through' => 'ProductsInTransaction'
    ]);
}
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'
    ]);
}
$this->belongsToMany('Products', [
    'through' => 'ProductsInTransaction'
]);
从上面的陈述中,这种关系应该是显而易见的。本质上,
SalesTransaction
包含我的所有交易,而交易中的
products\u
是我的联接表,可以将其与
products
连接在一起,但只需查看链接即可获得完整的方案

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

$sales_transactions = $sales_transactions_table->find('all', [
            'conditions' => [
                'device_id IN' => $deviceIdsInDepartment
            ],
            'contain' => [
                'Products'
            ]
        ]);
我得到这个错误:

您在
SalesTransaction
模型中使用的
具有许多关联

它应该是一个
目录

SalesTransactionTable

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

    $this->hasMany('Products', [
        'through' => 'ProductsInTransaction'
    ]);
}
public function initialize(array $config)
{
    parent::initialize($config); // TODO: Change the autogenerated stub

    $this->belongsToMany('SalesTransaction', [
        'through' => 'ProductsInTransaction'
    ]);
}
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'
    ]);
}
$this->belongsToMany('Products', [
    'through' => 'ProductsInTransaction'
]);

在您的
SalesTransaction
模型中,您正在使用一个
hasMany
关联

它应该是一个
目录

SalesTransactionTable

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

    $this->hasMany('Products', [
        'through' => 'ProductsInTransaction'
    ]);
}
public function initialize(array $config)
{
    parent::initialize($config); // TODO: Change the autogenerated stub

    $this->belongsToMany('SalesTransaction', [
        'through' => 'ProductsInTransaction'
    ]);
}
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'
    ]);
}
$this->belongsToMany('Products', [
    'through' => 'ProductsInTransaction'
]);

“它只是不起作用”真的告诉我们什么。你有什么问题?这是毫无疑问的。我只需要确保与声明相比,双方的关系建立得恰到好处。我将添加更多,2秒添加更多信息您需要为表定义主键,因为您对列名使用的是非蛋糕约定。不要认为这是问题所在-问题是,它试图通过直接查看products表来获取产品,但它应该首先通过联接表(ProductsInTransaction)但即使我说它是通过那张桌子来的,它也不使用它。“它只是不起作用”真的告诉我们什么。你有什么问题?这是毫无疑问的。我只需要确保与声明相比,双方的关系建立得恰到好处。我将添加更多,2秒添加更多信息您需要为表定义主键,因为您对列名使用的是非蛋糕约定。不要认为这是问题所在-问题是,它试图通过直接查看products表来获取产品,但它应该首先通过联接表(ProductsInTransaction)但即使我说它是通过那张桌子来的,它也不使用它。