0

問題/コードを投稿する前に、私がやっていることについて少し裏話をします。現在、cakephp と mysql を使用してウェブサイトを開発しています。ユーザーがログインでき、各ユーザーがチームを作成できるログインシステムがあります。ユーザーがチームを作成すると、そのユーザーはチーム リーダーと見なされます。データベースには 2 つのテーブルがあります。1 つはユーザー用で、もう 1 つはチーム用です。team テーブルには、チームを作成したユーザーを表す user_id というフィールドがあります。これは、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 が発生し続けます。なぜこれが起こっているのかわかりません。両方のテーブルのすべてのデータをチェックして相互参照したところ、データは両方のテーブルにあります! 両方のテーブルが Innodb であり、両方のフィールドが int であり、null を取りません。

4

2 に答える 2

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.');
    }

   }
} 
于 2012-09-05T04:17:19.263 に答える
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.');
    }
  }
}
于 2012-09-05T04:08:14.220 に答える