Я сейчас использую CakePHP 2.0-RC1.Будучи довольно изящным и все такое, я столкнулся только с одной проблемой, которую я не могу обернуть.Я прочитал документацию по связыванию моделей (http://www.cakedocs.com/models/associations-linking-models-together.html),, но как мне сказать CakePHP выполнить поиск по таблице отношений и найти значения, которые мне нужны? Позвольте мне объяснить.
У меня есть структура базы данныханалогично следующему (было упрощено для вопроса. PK = первичный ключ. FK = внешний ключ)
игра
- INT(11) id (PK)
- VARCHAR(100) name
- VARCHAR(40) year
- VARCHAR(10) age
категория
- INT(11) id (PK)
- VARCHAR(50) name
game_category
- INT(11) game_id (FK)
- INT(11) category_id (FK)
Объяснение отношений между ними:
Игра может иметьодна или несколько категорий. Это отношение определено в таблице "game_category". Я хочу, чтобы CakePHP не только находил идентификатор категории в игре, но и имя категории, когда я выполняю $ this-> Game-> find ('first'). Например, я предполагаю, что CakePHP нужно сказать "продолжить через таблицу game_category и перейти к таблице категорий" и найти, как на самом деле называется каждая категория.
У меня есть эти Модели
Game.php
<?php
class Game extends AppModel {
var $useTable = 'game';
var $hasMany = array(
'GameCategory' => array(
'fields' => '*',
'className' => 'GameCategory',
)
);
var $hasOne = 'Review';
}
?>
GameCategory.php
<?php
class GameCategory extends AppModel {
var $useTable = 'game_category';
var $belongsTo = 'category';
var $hasMany = array(
'Category' => array(
'fields' => '*',
'foreignKey' => 'category_id',
'className' => 'Category',
'conditions' => array('GameCategory.game_id' => 'Game.id', 'GameCategory.category_id' => 'Category.id'),
)
);
}
?>
Category.php
<?php
class Category extends AppModel {
var $useTable = 'category';
var $belongsTo = 'GameCategory';
}
?>
По определенным выше соотношениям я получаю следующие результаты:
Array
(
[Game] => Array
(
[id] => 2
[name] => Colonization
[year] => 1995
[age] => 7
)
[GameCategory] => Array
(
[0] => Array
(
[game_id] => 2
[category_id] => 19
)
[1] => Array
(
[game_id] => 2
[category_id] => 16
)
)
)
Осталось только получить фактическое название каждой категории.Я надеюсь, что кое-что из этого имело смысл.
Любая помощь приветствуется.