蛋糕php,sql错误150
在我发布我的问题/代码之前,我将对我正在做的事情做一点背景介绍。目前我正在使用cakephp和mysql开发一个网站。我有一个登录系统,用户可以登录,每个用户都可以创建一个团队。当用户创建团队时,他们被视为团队领导者。我的数据库中有两个表。一个用于用户,另一个用于团队。在teams表中有一个名为user_id的字段,它表示创建团队的用户。它是一个外键,链接到用户表中名为id的字段 因此,当用户创建团队时,我希望我的程序自动识别领导者的id,并将其保存为团队模型中的用户id,该团队模型将进入我的表中 这是我在团队模型类中的代码蛋糕php,sql错误150,php,mysql,database,cakephp,web-applications,Php,Mysql,Database,Cakephp,Web Applications,在我发布我的问题/代码之前,我将对我正在做的事情做一点背景介绍。目前我正在使用cakephp和mysql开发一个网站。我有一个登录系统,用户可以登录,每个用户都可以创建一个团队。当用户创建团队时,他们被视为团队领导者。我的数据库中有两个表。一个用于用户,另一个用于团队。在teams表中有一个名为user_id的字段,它表示创建团队的用户。它是一个外键,链接到用户表中名为id的字段 因此,当用户创建团队时,我希望我的程序自动识别领导者的id,并将其保存为团队模型中的用户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.');
}
}
}
您的代码应该如下所示:
您的控制器代码:
<?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.');
}
}
}
我们不应该在隐藏字段中使用用户id,因为我们已经在Auth.中使用了它,而且出于安全原因。set方法和您上面使用的方法有什么区别?我也按照上面的方法使用保存的记录数组以备将来使用。如果用户id与当前登录的用户id不同,则可能无法使用该字段访问该用户id。如果不向save()方法提供任何数组,set()方法将起作用。检查此链接:嘿,在不开始新问题的情况下,我如何通过团队模型更改用户模型中的字段?
<?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.');
}
}
}