小花多对多关系"has many - through"



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

让我们以Auth示例为例:

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

表:

创建表(如果不存在)roles

id int(11)unsigned not null auto_increment,

name varchar(32)不为空,

description varchar(255)不为空,

主键(id),

唯一键uniq_namename

)引擎= innodb默认charset = utf8;

-

创建表(如果不存在)roles_users

user_id int(10)unsigned not null,

role_id int(10)unsigned not null,

date时间戳记而不是默认currault_timestamp,

主键(user_idrole_id),

fk_role_idrole_id

)引擎= innodb默认charset = utf8;

-

创建表(如果不存在)users

id int(11)未签名不是null auto_increment,

email VARCHAR(254)不为空,

username varchar(32)不是null默认值'',

password varchar(64)不为空,

logins int(10)unsigned not null默认'0',

last_login int(10)unsigned,

主键(id),

唯一键uniq_usernameusername),

唯一键uniq_emailemail

)引擎= innodb默认charset = utf8;

模型

  • 模型角色

类Model_auth_role扩展ORM {

保护$ _has_many = array(

  'users' => array('model' => 'User','through' => 'roles_users'),

);

  • 用户模型

类Model_auth_user扩展了ORM {

保护$ _has_many = array(

  'roles'       => array('model' => 'Role', 'through' =>

'roles_users'),

);

控制器

公共功能action_create()

{

  $model = ORM::factory('user');
  $model->username = 'myusername';
  $model->password = 'password';
  $model->email = 'test@example.com';
  $model->save();
  **// How can i set the "date" to "roles_users" table ?**
  $model->add('roles', ORM::factory('role')->where('name', '=',

'login') -> find());

}

puboic函数action_get()

{

$ users = orm :: factory('用户') -> find_all();

  foreach ($users as $user)
  {
      $roles = $user->roles->find_all();
      echo $user->email." : <br>";
      **// How can i get the "date" from "roles_users" table ?**
      foreach ($roles as $role)
          echo " ->".$role->name."<br>";
  }

}

问题

我有两个问题:

1-如何将"日期"设置为" roles_users"表?在控制器Action_Create()

2-如何从" roles_users"表中获取"日期"?在控制器Action_get()

预先感谢。

如果那是您想要的,则可以做两件事:

  • 创建一个单独的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,

相关内容

  • 没有找到相关文章

最新更新