問題/コードを投稿する前に、私がやっていることについて少し裏話をします。現在、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 を取りません。