我有 3 个树状连接表。它们的架构如下:
Member{
//Some column
}
Transactions{
member_id :: foreign key of member table
//Some other column
}
TransactionItems{
transaction_id :: foreign key of Transaction table
//Some other column
}
我这样定义模型:
class Members extends AppModel {
public $primaryKey = 'id';
public $hasOne = array(
'Transactions' => array(
'className' => 'Transactions',
'foreignKey' => 'member_id',
'dependent' => true
)
);
}
class Transactions extends AppModel {
public $primaryKey = 'id';
public $belongTo = array('Members');
public $hasOne = array(
'TransactionItems' => array(
'className' => 'TransactionItems',
'foreignKey' => 'transaction_id',
'dependent' => true
)
);
}
class TransactionItems extends AppModel {
public $primaryKey = 'id';
public $belongTo = array('Transactions');
public $belongsTo = array(
'Transactions' => array(
'className' => 'Transactions',
'foreignKey' => 'transaction_id'
)
);
}
我有一个数据数组,我想将其保存到数据库中。我的方案是:
Array(
[Members] = [],//Array
[Transactions] = [],//Array
[TransactionItems] = []//Array
)
问题是,每当我运行 $this->Members->saveAll($data)
时。它将数据保存在成员(member)和交易表中。但不要在 TransactionItems 表中创建数据。我想一次保存所有 3 个表。
如有任何帮助,我们将不胜感激。
最佳答案
二级(及以上)关联必须是嵌套的,即数据结构需要是:
array(
'Members' => array(),
'Transactions' => array(
'TransactionItems' => array()
)
)
有点尴尬,但这就是它在 2.x 中的工作原理。您始终可以在读取数据时引用返回的结构,保存数据时它需要相同。
此外,您必须将 deep
选项设置为 true
才能保存二级及以上关联(默认情况下仅保存一级关联):
$this->Members->saveAll($data, array('deep' => true));
另请参阅
关于php - 如何在 CakePHP 2 中保存 3 棵树(如连接表)的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53722184/