在我发布我的问题/代码之前,我将给出一些我正在做的事情的背景故事。目前我正在使用cakephp和mysql开发一个网站。我有一个登录系统,用户可以登录,每个用户都可以创建一个团队。当用户创建团队时,他们被视为团队领导。我的数据库中有两个表。一个是用户,另一个是团队。在teams表中有一个名为user_id的字段,表示创建团队的用户。它是一个foriegn键,链接到User表中名为id的字段。
因此,当用户创建团队时,我希望我的程序能够自动识别领导者的ID,并将其保存为进入我的表格的团队模型中的user_id。
这是团队模型类
中的代码<?php
class TeamsController extends AppController {
public $name = 'Teams';
public function add() {
if ($this->request->is('post')) {
//THIS LINE SETS THE TEAM LEAD
$this->Team->set('user_id', $this->Auth->user('id'));
echo $this->Auth->user('id');
if ($this->Team->save($this->request->data)) {
$this->Team->set('user_id', $this->Auth->user('id'));
$this->Session->setFlash('The team has been saved');
$this->redirect(array('controller' => 'Users','action' => 'index'));
} else {
$this->Session->setFlash('The team could not be created. Please, try again.');
}
}
}
正如您所看到的,我从当前用户模型中抓取user_id并将其放入团队模型中。
然而,当我这样做时,我不断收到一个mysql错误150,这与foriegn键约束有关。我不确定为什么会这样。我检查并交叉引用了两个表中的所有数据,数据在两个表中!两个表都是Innodb,两个字段都是整数,不带空值。
答案 0 :(得分:0)
您的代码应如下所示:
您的控制器代码:
<?php
class TeamsController extends AppController {
public $name = 'Teams';
public function add() {
if ($this->request->is('post')) {
$team_details = $this->request->data;
$team_details['Team']['user_id'] = $this->Auth->user('id');
if ($this->Team->save($team_details)) {
$this->Session->setFlash('The team has been saved');
$this->redirect(array('controller' => 'Users','action' => 'index'));
} else {
$this->Session->setFlash('The team could not be created. Please, try again.');
}
}
}
答案 1 :(得分:0)
<?php
class TeamsController extends AppController {
public $name = 'Teams';
public function add() {
if ($this->request->is('post')) {
//THIS LINE SETS THE TEAM LEAD
$this->request->data['Team']['user_id']= $this->Auth->user('id');
if ($this->Team->save($this->request->data)) {
$this->set('user_id', $this->Auth->user('id'));
$this->Session->setFlash('The team has been saved');
$this->redirect(array('controller' => 'Users','action' => 'index'));
} else {
$this->Session->setFlash('The team could not be created. Please, try again.');
}
}
}