关于Laravel的雄辩ORM的问题 . 我已经看过SO了,如果我错过了类似的问题,我会道歉 .
我有一个User模型,我正在尝试通过User模型中的关系将一组权限写回UserPermissions模型 .
我已经设置了hasMany链接,并且可以从User对象( $user->roles
)中检索正确的数据,但如果可能的话,无法解决如何回写的问题 .
这是我的基本用户模型:
class User extends Eloquent {
protected $table = 'users';
public $timestamps = false;
protected function roles() {
return $this->hasMany('UserPermission');
}
}
和UserPermission模型:
class UserPermission extends Eloquent {
protected $table = 'users_permissions';
public $timestamps = false;
protected $fillable = ['role_id', 'user_id'];
}
在这个阶段,我已经恢复保存用户,然后运行 UserPermission::insert()
,它允许传递一个数组,但如果可能的话,我宁愿一步完成 .
任何人都知道这是否可行?
谢谢!
UPDATE :
表格结构如下:
用户表
+------------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | 0 | auto_increment |
| username | varchar(255) | NO | | | |
+------------------+------------------+------+-----+---------+----------------+
users_roles表
+------------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | 0 | auto_increment |
| name | varchar(255) | NO | | | |
| description | varchar(255) | YES | | NULL | |
| url_access | varchar(255) | NO | | | |
+------------------+------------------+------+-----+---------+----------------+
users_permissions表
+------------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | 0 | auto_increment |
| role_id | int(10) unsigned | NO | | | |
| user_id | int(10) unsigned | NO | | | |
+------------------+------------------+------+-----+---------+----------------+
role_id
与 users_roles.id
有关, user_id
与 users.id
有关
作为背景逻辑, users_roles
表有一个 url_access
列,其中包含一个url . 如果为该角色分配了用户,则他们可以访问该URL中的子页面 .
3 回答
我真的不明白你为什么使用 hasMany 关系而不是 belongsToMany . 实际上,您的数据库结构似乎已经被Laravel中的belongsToMany关系所使用 .
我的解决方案
User.php
Role.php
}
相应的数据库表应为:
users
,roles
和role_user
. 这些都符合Laravel的命名惯例,以便简单易懂 .现在您可以调用
sync
方法并将数组传递给它:同步方法在Eloquent ORM documentation中简要描述 .
好的,这是你可以尝试的 .
在 both 模型中定义多对多关系 .
然后,如果您创建用户,请使用laravel attach方法将用户连接到users_permission,如下所示:
将ID为1的角色附加到ID为1的用户 .
这是您可以将角色附加到用户或将用户附加到角色的方式,如果您正在创建用户或更新用户 .
我真的希望这对你有所帮助 . 如果没有,请随时再问我 . 几天前我已经用照片和标签定义了很多很多关系,所以我很想说 .
此外,laravel文档甚至还有一个用户和角色的示例:
http://laravel.com/docs/eloquent#many-to-many
从阅读你的问题“听起来像”你问的是我前几天遇到的同样的问题 .
我希望这有助于您在保持时间戳和避免重复关系的同时“批量更新”关系 .
也许有更好的方法 . 我敢肯定 . 但这完全适用于我想要完成的事情 .
*警告:这不是经过测试的代码 . 事实上,我使用一些搜索/替换的确切解决方案来帮助解决您的问题
Eloquent Docs
在Twitter上找到我:@ErikOnTheWeb