私は CakePHP の本を読みましたが、うまくいきませんでした。
という名前のテーブルがありますfrendslists
。すべてのユーザー ( owner_user_id
) には友達が多すぎるので、友達をfriend_id
列に追加します。(モデル名はフレンドリスト)
CREATE TABLE IF NOT EXISTS `friendslists` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`owner_user_id` int(20) unsigned NOT NULL,
`friend_id` int(20) NOT NULL COMMENT 'id of the friend',
PRIMARY KEY (`id`),
KEY `friend_id` (`friend_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
--id-------owner_user_id-----friend_id
--------------------------------------
--1--------1234--------------9200-----
--2--------1234--------------3210-----
--3--------1234--------------7600-----
私もprofiles
テーブルを持っています。すべてのユニークな人物には、そこにプロファイルがあります。1 人が持つことができるプロファイルは 1 つだけです。(モデル名はProfile)
CREATE TABLE IF NOT EXISTS `profiles` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`profile_user_id` int(20) NOT NULL,
`name` varchar(50) NOT NULL,
`location` varchar(50) NOT NULL,
PRIMARY KEY (`id`),
KEY `profile_user_id` (`profile_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
--id------profile_user_id---name------location-
-----------------------------------------------
--1-------9200--------------michael----usa-----
--2-------3210--------------john-------uk------
--3-------7600--------------danny------denmark-
フレンドリスト テーブルをプロファイル テーブルにリンクしたいと考えています。これは 1 対 1 (hasOne) または多対 1 (belongsTo) タイプの関係ですか?
friendslists テーブルにクエリを実行すると、友達のプロファイル データを取得したいと考えています。CakePHP のモデルとテーブル内で何をすべきですか?
次のような外部キーを作成しました。
ALTER TABLE `friendslists`
ADD CONSTRAINT `friendslists_ibfk_1`
FOREIGN KEY (`friend_id`)
REFERENCES `profiles` (`profile_user_id`)
ON DELETE CASCADE ON UPDATE CASCADE;
モデルファイルを次のように変更しました。
class Friendslist extends AppModel {
var $name = 'Friendslist';
var $useTable = 'friendslists';
public $belongsTo = array(
'Profile' => array(
'className' => 'Profile',
'foreignKey' => 'friend_id'
)
)
function getAll(){
return $this->find('all');
}
}
最後に私がこれを行うとき:
$records=$this->Friendslist->find('all', array('conditions' => array(
'Friendslist.owner_user_id' => 1234)
));
私はこれらの結果を得る:
[Friendslist] => Array
(
[id] => 1
[owner_user_id] => 1234
[friend_id] => 9200
)
[Profile] => Array
(
[id] =>
[profile_user_id] =>
[name] =>
[location] =>
)
)
プロファイル テーブルには profile_user_id=9200 のレコードがあるはずです。しかし、プロファイル レコードは空になります。