首页 文章

Kohana多对多的关系“有很多 - 通过”

提问于
浏览
0

我正在使用kohana v3.3,我想知道是否有可能在数据透视表中获取/保存另一个数据?

让我们来看看Auth的例子:

  • 所以我们有3个表(角色,用户,roles_users),我在数据透视表上添加了另一个列 "date"

Tables :

CREATE TABLE IF NOT EXISTS role(id int(11)UNSIGNED NOT NULL AUTO_INCREMENT,name varchar(32)NOT NULL,description varchar(255)NOT NULL,PRIMARY KEY(id),UNIQUE KEY uniq_name(name))ENGINE = InnoDB DEFAULT CHARSET = utf8; - CREATE TABLE IF NOT EXISTS roles_users(user_id int(10)UNSIGNED NOT NULL,role_id int(10)UNSIGNED NOT NULL,date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY(user_id,role_id),KEY fk_role_id(role_id))ENGINE = InnoDB DEFAULT CHARSET = utf8; - CREATE TABLE IF NOT EXISTS用户(id int(11)UNSIGNED NOT NULL AUTO_INCREMENT,email varchar(254)NOT NULL,username varchar(32)NOT NULL DEFAULT'',password varchar(64)NOT NULL,logins int(10 )UNSIGNED NOT NULL DEFAULT'0',last_login int(10)UNSIGNED,PRIMARY KEY(id),UNIQUE KEY uniq_username(username),UNIQUE KEY uniq_email(email))ENGINE = InnoDB DEFAULT CHARSET = utf8;

Models

  • 模型角色

class Model_Auth_Role扩展ORM {protected $ _has_many = array('users'=> array('model'=>'User','through'=>'roles_users'),
);

  • 用户模型

class Model_Auth_User扩展ORM {protected $ _has_many = array('roles'=> array('model'=>'Role','through'=>
'roles_users'),);

Controller

public function action_create(){$ model = ORM :: factory('user');

$ model-> username ='myusername';

$ model-> password ='password';

$ model-> email ='test@example.com';

$模型 - )>保存(;

** //如何将“date”设置为“roles_users”表?**

$ model-> add('roles',ORM :: factory('role') - > where('name','=',
'登录') - >查找()); puboic function action_get(){$ users = ORM :: factory('user') - > find_all(); foreach($ users as $ user)

{

$ roles = $ user-> roles-> find_all();

echo $ user-> email . “:<br>”;

** //如何从“roles_users”表中获取“日期”?**

foreach($ role as $ role)

echo“ - >” . $ role-> name . “<br>”;

}
}

Questions

我有两个问题:

1-如何将“date”设置为“roles_users”表?在控制器action_create()上

2-如何从“roles_users”表中获取“日期”?在控制器上action_get()

提前致谢 .

1 回答

  • 0

    如果这是你想要的,你可以做两件事:

    • 创建一个单独的 Model_Roles_User 并使用它来创建关系并获取/设置其属性 .

    这将要求您添加 id AUTO_INCREMENT 列,因为Kohana本身不支持复合键;或者是一个好人,并扩展kohana的功能来支持它:-)

    • 保持原样并对 SELECTUPDATE 行使用一些自定义查询

    这应该也相当容易:

    $result = DB::select('date')
        ->from('roles_users')
        ->where('user_id', '=', $user_id)
        ->and_where('role_id', '=', $role_id)
        ->execute();
    

    问题#1的答案相当容易 . 数据库已经解决了这个问题! ( date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

相关问题