我正在尝试保存关联的数据,但即使它似乎设置正确,它也不会提交到数据库。我必须明确使用关联表来保存数据。使用“关联”关键字是无效的。
我的控制器动作:
public function test_associated_save()
{
$usersTable = TableRegistry::get('Users');
$test_user = $usersTable->get(21, ['contain' => ['Names']]);
$test_user['names'][0]['middle'] = 'test name';
$usersTable->save($test_user);
$usersTable->save($test_user, ['associated' => ['Names']]);
debug($test_user);
$test_user = $usersTable->get(21, ['contain' => ['Names']]);
debug($test_user);
$test_user['names'][0]['middle'] = 'test name';
$namesTable = TableRegistry::get('Names');
$namesTable->save($test_user['names'][0]);
$test_user = $usersTable->get(21, ['contain' => ['Names']]);
debug($test_user);
}
两个 $test_user 第一次调试的调试输出
object(App\Model\Entity\User) {
'id' => (int) 21,
...
'names' => [
(int) 0 => object(App\Model\Entity\Name) {
'id' => (int) 20,
'user_id' => (int) 21,
'middle' => 'test name',
...
'[accessible]' => [
...
'middle' => true,
...
],
'[dirty]' => [
'middle' => true
],
'[original]' => [
'middle' => ''
],
'[virtual]' => [],
'[errors]' => [],
'[repository]' => 'Names'
},
...
第二次调试
object(App\Model\Entity\User) {
'id' => (int) 21,
...
'names' => [
(int) 0 => object(App\Model\Entity\Name) {
'id' => (int) 20,
'user_id' => (int) 21,
'middle' => '',
...
'[accessible]' => [
...
'middle' => true,
...
],
'[dirty]' => [],
'[original]' => [],
'[virtual]' => [],
'[errors]' => [],
'[repository]' => 'Names'
},
...
第三次调试
object(App\Model\Entity\User) {
'id' => (int) 21,
...
'names' => [
(int) 0 => object(App\Model\Entity\Name) {
'id' => (int) 20,
'user_id' => (int) 21,
'middle' => 'test name',
...
'[accessible]' => [
...
'middle' => true,
...
],
'[dirty]' => [],
'[original]' => [],
'[virtual]' => [],
'[errors]' => [],
'[repository]' => 'Names'
},
...
我的用户表
class UsersTable extends Table
{
public function initialize(array $config)
{
$this->table('users');
$this->displayField('username');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
$this->hasMany('Names', [
'foreignKey' => 'user_id'
]);
...
}
...
}
我的名字表
类 NamesTable 扩展表 {
/**
* Initialize method
*
* @param array $config The configuration for the Table.
* @return void
*/
public function initialize(array $config)
{
$this->table('names');
$this->displayField('id');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
$this->belongsTo('Users', [
'foreignKey' => 'user_id',
'joinType' => 'INNER'
]);
}
我的 mysql 表
CREATE TABLE IF NOT EXISTS `users` (
`id` int(10) unsigned NOT NULL,
`username` varchar(50) NOT NULL,
...
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `names` (
`id` int(10) unsigned NOT NULL,
`user_id` int(10) unsigned NOT NULL,
`middle` varchar(255) NOT NULL,
...
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8;