CakePHP 3-通过其他表连接?
我正在尝试创建以下DB结构: 具体而言,我正在研究以下两者之间的关系: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
销售交易
产品
交易中的产品
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)但即使我说它是通过那张桌子来的,它也不使用它。