У меня есть две таблицы Users
и Clients
CakePHP сохранить оленья кожа сохранить ассоциированные моделируют
пользователей таблица struckture выглядит следующим образом:
id (primary)
username(varchar)
password, client_id
Теперь мой клиент таблица выглядит следующим образом:
user_id, client_id(primary), is_new
отношения между ними определены следующим образом:
class User extends AppModel
{
public $name = 'User';
public $hasOne = array(
'Client' =>array(
'className' => 'Client',
'dependent' => true,
'foreignKey' => 'client_id'
)
);
}
class Client extends AppModel
{
public $name = 'Client';
public $primaryKey = 'client_id';
public $belongsTo = array(
'User' => array(
'className' => 'User',
'dependent' => true,
'foreignKey' => 'user_id'
)
);
}
Теперь в моем UsersController у меня есть следующие действия сохранения:
if ($this->request->is('post')) {
$data = null;
$client_id = null;
if ($this->request->data['User']['group_id'] == 1) {
$client_id = 2;
} elseif ($this->request->data['User']['group_id'] == 2) {
$client_id = $this->request->data['User']['Client id'];
}
$data = array('User' => array(
'username' => $this->request->data['User']['username'],
'password' => $this->request->data['User']['password'],
'group_id' => $this->request->data['User']['group_id'],
'client_id' => $client_id),
'Client' => array('client_id' => $client_id)
);
if ($this->User->save($data)) {
$this->Session->setFlash(__('The user has been saved'));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The user could not be saved. Please, try again.'));
}
}
$groups = $this->User->Group->find('list');
$this->set(compact('groups'));
}
Когда я сохранить новый объект добавляется в таблицу пользователей с правильным client_id, но ничего не было добавлено в таблицу клиентов.
Может ли кто-нибудь сказать мне, почему это происходит?
Обратите внимание, что я пытался изменить функцию saveAll();
Update
Если я сделать следующее:
$data = array('User' => array('username' => $this->request->data['User']['username'],
'password' => $this->request->data['User']['password'],
'group_id' => $this->request->data['User']['group_id'],
'client_id' => $client_id),
'Client' => array('client_id' => $client_id));
if ($this->User->Client->saveAll($data)) {
}
Ака использовать $this->User->Client->saveAll
вместо $this->User->saveAll()
Все хорошо работает ..
Теперь это хорошо, но так ли должно быть?
почему вы не используете '$ this-> User-> сохранить ($ this-> request-> данные)', вместо того, чтобы эффективно скопировать его в другую переменную?С точки зрения кода вам будет лучше помещать этот код в модельную функцию, чтобы код контроллера был просто '$ this-> User-> register ($ this-> request-> data);' - Fat models, тонкие контроллеры –
AD7six
@ AD7six единственная причина, по которой я делаю это, потому что есть только 1 случай, когда мне нужно жестко кодировать мой client_id (это имеет какое-то отношение к доступу к моей программе), это может быть преобразовано в модель, я согласен хотя – Marc
'$ this-> request-> data ['Client'] ['client_id'] = $ foo' сделал бы это - похоже, что это нужно делать только иногда, хотя бы 2 строки кода вместо ~ 14 – AD7six