1

我想用用户、游戏和游戏平台(例如 PS3)在蛋糕 php 应用程序中创建我有表:

userGames (游戏有一个平台) id, name, platform_id

用户(用户可以有很多平台)id、用户名

平台 ID、名称

users_platforms id、platform_id、user_id

现在我想选择所有用户 id=1 平台,并将其列为选择标签。这是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) 任何人都可以帮助我吗?

4

3 回答 3

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
));
于 2012-08-18T14:51:17.080 回答
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',
    ),
);
于 2012-08-18T16:47:43.403 回答
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' => ''
        )
);
}
于 2014-09-09T10:22:36.757 回答