我正在使用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 回答
如果这是你想要的,你可以做两件事:
Model_Roles_User
并使用它来创建关系并获取/设置其属性 .这将要求您添加
id AUTO_INCREMENT
列,因为Kohana本身不支持复合键;或者是一个好人,并扩展kohana的功能来支持它:-)SELECT
或UPDATE
行使用一些自定义查询这应该也相当容易:
问题#1的答案相当容易 . 数据库已经解决了这个问题! (
date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
)