【问题标题】:Kohana many-to-many relationship "has many - through"Kohana 多对多关系“有很多-通过”
【发布时间】:2014-02-12 14:46:13
【问题描述】:

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

让我们以 Auth 为例:

  • 所以我们有 3 个表(roles、users、roles_users),我在数据透视表上添加了另一列 "date"

表格:

如果不存在则创建表roles (

id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,

namevarchar(32) 非空,

descriptionvarchar(255) 非空,

主键 (id),

唯一键uniq_name (name)

) ENGINE=InnoDB 默认字符集=utf8;

--

如果不存在则创建表roles_users (

user_id int(10) UNSIGNED NOT NULL,

role_id int(10) UNSIGNED NOT NULL,

datetimestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

主键 (user_id,role_id),

密钥fk_role_id (role_id)

) ENGINE=InnoDB 默认字符集=utf8;

--

如果不存在则创建表users (

id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,

emailvarchar(254) 非空,

usernamevarchar(32) NOT NULL DEFAULT '',

passwordvarchar(64) 非空,

logins int(10) UNSIGNED NOT NULL DEFAULT '0',

last_loginint(10) 未签名,

主键 (id),

唯一键uniq_username (username),

唯一键uniq_email (email)

) ENGINE=InnoDB 默认字符集=utf8;

模型

  • 模特角色

类 Model_Auth_Role 扩展 ORM {

受保护的 $_has_many = 数组(

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

);

  • 用户模型

类 Model_Auth_User 扩展 ORM {

受保护的 $_has_many = 数组(

  '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', '=',

'登录')->find());

}

公共函数 action_get()

{

$users = ORM::factory('user')->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()

提前致谢。

【问题讨论】:

    标签: php orm many-to-many kohana relationship


    【解决方案1】:

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

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

    【讨论】:

    • 您可以通过投票来感谢我,如果它完全回答了您的问题,请接受它。
    • (对不起,我忘记发布所有消息) - 我宁愿避免使用许多 sql 请求,还有其他方法可以从/到 Roler_Users 表中获取/设置数据吗?我试图添加"$_belongs_to (roles,users) into Model_Roles_Users" 但没办法。我正在寻找类似 @​​987654328@ 的东西 - 我同意,数据库会处理默认插入,但如果我想输入其他内容(例如第 5 天),我想使用类似 @987654329 的东西@
    • 在那种情况下Create a seperate Model_Roles_User and use it to create the relationship and get/set its properties.
    • 你能举个例子吗,我不是专家
    猜你喜欢
    • 1970-01-01
    • 2013-08-22
    • 2017-09-03
    • 2016-09-22
    • 2019-06-27
    • 1970-01-01
    • 2016-04-18
    • 2015-02-15
    • 1970-01-01
    相关资源
    最近更新 更多