人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

CakePHPのbelongsTOの使い方について質問です。

[テーブル名][フィールド]
users:id,category_id,name
categorys:category_id,category_name

としているのですが、Userモデルに
var $belongsTo = array('Category' => array('className' => 'Category','foreignKey' => 'category_id','associationForeignKey' => 'category_id'));

と書くとエラーになり、
categorysテーブルのcategory_idをidにすると結合できます。

これまで「テーブル名_フィールド名」のようなテーブル構成をしていたのでとまどいがあるのですが、
CakePHPでそういう書き方が出来る場合、コードを教えてください。バージョンは1.3.2です。


●質問者: k27w
●カテゴリ:ウェブ制作
✍キーワード:CakePHP name USER エラー コード
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tdoi
●60ポイント

CakePHPのConventionと異なる部分を明示する必要があります。

この場合はCategoryテーブルの主キーがidではないので、それを指定します。

class Category extends AppModel {
var $name = 'Category';
var $primaryKey = 'category_id';
}

そのうえで、User belongsTo Categoryなら、次のように記述します。

class User extends AppModel {
var $name = 'User';
var $belongsTo = array(
'Category' => array(
'className' => 'Category',
'foreignKey' => 'category_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
}

これでControllerから、

$this->User->find('all');

とでもすれば、

SELECT `User`.`id`, `User`.`category_id`, `User`.`name`, `User`.`created`, `User`.`modified`, `Category`.`category_id`, `Category`.`category_name`, `Category`.`created`, `Category`.`modified` FROM `users` AS `User` LEFT JOIN `categories` AS `Category` ON (`User`.`category_id` = `Category`.`category_id`) WHERE 1 = 1 

というクエリを生成してくれます。

◎質問者からの返答

ありがとうございます。希望通りできました。

モデルに$primaryKeyを指定すれば良いんですね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ