我在使用CakePHP 2.2.4时遇到了一个非常奇怪的问题,让我解释一下发生了什么。
我有这些mysql表:
线索
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | YES | MUL | NULL | |
| date | datetime | YES | | NULL | |
| ip | varchar(45) | YES | | NULL | |
| service_id | int(11) | YES | MUL | NULL | |
| location | varchar(255) | YES | | NULL | |
| message | text | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
用户
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| email | varchar(200) | YES | | NULL | |
| pwd | varchar(200) | YES | | NULL | |
| role_id | int(11) | YES | MUL | NULL | |
| active | tinyint(4) | YES | | 0 | |
+---------+--------------+------+-----+---------+----------------+
简介
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | YES | MUL | NULL | |
| name | varchar(120) | YES | | NULL | |
| surname | varchar(120) | YES | | NULL | |
| company | varchar(200) | YES | | NULL | |
| vat | varchar(60) | YES | | NULL | |
+---------+--------------+------+-----+---------+----------------+
地址
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| profile_id | int(11) | YES | MUL | NULL | |
| address | varchar(255) | YES | | NULL | |
| city | varchar(120) | YES | | NULL | |
| zip_code | char(5) | YES | | NULL | |
| nation | varchar(120) | YES | | NULL | |
| telephone | varchar(200) | YES | | NULL | |
| mobile | varchar(200) | YES | | NULL | |
| fax | varchar(200) | YES | | NULL | |
| email | varchar(200) | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
角色
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(100) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
服务
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
以下是我使用的所有 CakePhp 模型(带有关联):
铅.php
class Lead extends AppModel {
public $name = 'Lead';
/* Relazioni */
public $belongsTo = array('User', 'Service');
}
用户.php
class User extends AppModel {
public $name = 'User';
/* Relazioni */
public $hasOne = 'Profile';
public $belongsTo = 'Role';
public $hasMany = array(
'Lead' => array(
'className' => 'Lead'
)
);
}
配置文件.php
class Profile extends AppModel {
public $name = 'Profile';
/* Relazioni */
public $belongsTo = 'User';
public $hasMany = array(
'Address' => array(
'className' => 'Address'
)
);
}
地址.php
class Address extends AppModel {
public $name = 'Address';
/* Relazioni */
public $belongsTo = 'Profile';
}
服务.php
class Service extends AppModel {
public $name = 'Service';
}
我有一个必须保存在多个 mysql 表中的表格。
这是我用来起草表格的代码:
<?php
echo $this->Form->create(null, array(
'inputDefaults' => array(
'error' => false
)
)
); //create(false) per il form senza il modello
echo $this->Form->input('User.Profile.name', array(
'label' => array(
'class' => 'name-form',
'text' => 'Nome:'
),
'style' => 'width:238px;',
'div' => 'field'
)
);
echo $this->Form->input('User.Profile.surname', array(
'label' => array(
'class' => 'name-form',
'text' => 'Cognome:'
),
'style' => 'width:238px;',
'div' => 'field'
)
);
?>
<div class="clear"></div>
<?php
echo $this->Form->input('User.email', array(
'label' => array(
'class' => 'name-form',
'text' => 'Email:'
),
'div' => 'field',
'class' => 'input-xlarge'
)
);
echo $this->Form->input('User.Profile.Address.telephone', array(
'label' => array(
'class' => 'name-form',
'text' => 'Telefono:'
),
'div' => 'field'
)
);
?>
<div class="clear"></div>
<?php
echo $this->Form->input('Lead.service_id',
array(
'label' => array(
'class' => 'name-form',
'text' => 'Servizio richiesto:'
),
'div' => 'field',
'type' => 'select',
'options' => $services
)
);
echo $this->Form->input('Lead.location', array(
'label' => array(
'class' => 'name-form',
'text' => 'Vicino a:'
),
'div' => 'field',
'class' => 'input-xlarge'
)
);
?>
<div class="clear"></div>
<?php
echo $this->Form->input('Lead.message', array(
'label' => array(
'class' => 'message-form',
'text' => 'Richiesta:'
),
'div' => 'field',
'class' => 'form-field',
'type' => 'textarea'
)
);
echo $this->Form->button('Invia Richiesta', array(
'type' => 'submit',
'class' => 'submit-btn less-margin'
)
);
echo $this->Form->end();
?>
这是保存数据的控制器(PagesController)的操作:
public function home()
{
if ($this->request->is('post'))
{
$this->loadModel('Lead');
$this->request->data['Lead']['ip'] = $_SERVER['REMOTE_ADDR'];
$this->request->data['Lead']['date'] = date('Y-m-d H:i:s');
$this->request->data['User']['role_id'] = 3;
$this->Lead->set($this->request->data);
debug($this->request->data);
if ($this->Lead->validates())
{
// Dati nel modulo corretti
debug($this->Lead->saveAll($this->request->data, array('deep' => true)));
}
else
{
// Errore nella validazione
$this->Session->setFlash('Completare correttamente il form', 'default', array('class' => 'errore'), 'lead');
$errors = $this->Lead->validationErrors;
debug($errors);
}
}
$this->loadModel('Service');
$this->set('services', $this->Service->find('list'));
}
这是从 FORM 生成的输出:
array(
'User' => array(
'Profile' => array(
'name' => 'The Name',
'surname' => 'The Surname',
'Address' => array(
'telephone' => 'The Telephone'
)
),
'email' => 'the@email.com',
'role_id' => (int) 3
),
'Lead' => array(
'service_id' => '1',
'location' => 'The location',
'message' => 'This is the request',
'ip' => '127.0.0.1',
'date' => '2013-01-01 08:07:42'
)
)
问题:
一切正常,除了一件事......saveAll()
正确保存所有数据(在每个模型中),但在地址表中我只看到 CakePhp 插入profile_id,只有这个字段,但正如您在从 FORM 生成的数组中看到的那样,我也有电话!
为什么 cakephp 不也插入电话字段?
谢谢