我想用用户,游戏和游戏平台创建蛋糕php应用程序(适用于前PS3) 我得到了桌子:
userGames(游戏有一个平台) id,name,platform_id
用户(用户可以拥有多个平台) id,用户名
平台 id,name
users_platforms id,platform_id,user_id
现在我想选择所有用户id = 1平台,并将其列为select标签。 这是sql查询:
SELECT platforms.name, platforms.id FROM platforms LEFT JOIN platforms_users ON platforms_users.platform_id=platforms.id WHERE platforms_users.user_id=1
但我不知道在cakePHP中通过find('list')函数列出这个 我尝试输入用户控制器:
$ this-> User-> Platform-> find('list',array('conditions',array('User.id'=>'1')));
但是这会返回sql问题(未完成的User.id) 有人可以帮帮我吗?
答案 0 :(得分:3)
请试试这个
$this->loadModel('UserPlatform');
$this->UserPlatform->bindModel(array(
'belongsTo' => array('Platform')
));
$this->UserPlatform->find('list', array(
'fields' => array('Platform.id','Platform.name'),
'conditions' => array('UserPlatform.user_id'=>'1'),
'recursive' => 1
));
答案 1 :(得分:0)
您必须在连接表上应用查找功能
您的发现必须与此相同:
$this->PlatformUser->find('list',array('fields'=>
array('Platform.name','Platform.id'),'conditions'=> array('PlatformUser.id' => 1)));
您的PlatformUser模型必须具有:
public $belongsTo = array(
'Platform' => array(
'className' => 'Platform',
'foreignKey' => 'platform_id',
),
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id',
),
);
答案 2 :(得分:0)
您要做的实际上是HasAndBelongsToMany协会。
http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html
hasAndBelongsToMany(HABTM)
我们需要在数据库中设置一个额外的表来处理HABTM关联。这个新的连接表的名称需要包括所涉及的两个模型的名称,按字母顺序排列,并用下划线(_)分隔。表的内容应该是两个字段,它们是指向所涉及模型的主键的外键(应该是整数)。要避免任何问题,请不要为这两个字段定义组合主键。如果您的应用程序需要唯一索引,则可以定义一个索引。如果您计划向此表添加任何额外信息,或使用“with”模型,则应添加其他主键字段(按照惯例'id')。
HABTM需要一个包含两个模型名称的单独连接表。
(如果我做对了,这将是UserPlatform表。)
确保表格蛋糕和食谱中的主键具有常规假设的“id”字段。如果它们与假设不同,则必须在模型的primaryKey中更改它们。
class Recipe extends AppModel {
public $hasAndBelongsToMany = array(
'Ingredient' =>
array(
'className' => 'Ingredient',
'joinTable' => 'ingredients_recipes',
'foreignKey' => 'recipe_id',
'associationForeignKey' => 'ingredient_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'with' => ''
)
);
}