正在将数据加载到 Eloquent 个模型中
Loading data into Eloquent models
好吧,假设我有一个 api,其中 returns 是 json 中的一个数据对象。该对象如下所示。
{
"id" : 1,
"name":"SynAck",
"sex":"Male",
"age":34,
"roles": [
{
"id":1
"name":"user"
"assigned":"2013-06-10"
},
{
"id":1
"name":"admin"
"assigned":"2014-01-09"
}
],
"created":"2014-06-10"
}
如您所见,这里返回了 2 个对象,第一个,我们称之为 "user" 和另一个对象,它是第一个内部的数组,"roles"。已为用户分配了 2 个角色。
假设我想将这些信息逐字加载到我的数据库中。我可以创建 3 个表,'user' 和 'roles' 和 'user_roles',外键链接 user->user_roles->roles。一个用户有多个角色。
CREATE TABLE IF NOT EXISTS `users` (
`id` INT(12) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
`sex` VARCHAR(10) NOT NULL,
`age` SMALLINT(2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `roles` (
`id` INT(12) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
`assigned` DATETIME ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `user_roles` (
`user_id` INT(12) UNSIGNED NOT NULL ,
`role_id` INT(12) UNSIGNED NOT NULL ,
CONSTRAINT `fk_ur_user_id` FOREIGN KEY(`user_id`) REFERENCES users(`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_ur_role_id` FOREIGN KEY(`role_id`) REFERENCES roles(`id`) ON DELETE CASCADE ON UPDATE CASCADE,
UNIQUE `idx_user_id_role_id`(`user_id`, `role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
然后我会使用 artisan 创建 Eloquent 模型,在用户模型中,我会有一个 hasManyThrough('roles', 'user_roles');
将数据从 json 加载到 models/tables 的最快最干净的方法是什么?
我是否只需要一个一个地分配值,或者有没有办法将属性从 json 对象映射到 eloquent 模型?如果可能的话,它是如何处理这种关系的?
我认为可以为每个 table 创建模型,然后使用函数 json_decode
将 JSON 转换为数组,然后使用 Eloquent方法来保存然后。原始示例:
$data = json_decode($json);
User::create($data);
仍然,您需要提取关系数据。原始示例:
$data = json_decode($json);
$roles = $data['roles'];
unset($data['roles']);
$user = User::create($data);
$user->roles()->create($roles);
好吧,假设我有一个 api,其中 returns 是 json 中的一个数据对象。该对象如下所示。
{
"id" : 1,
"name":"SynAck",
"sex":"Male",
"age":34,
"roles": [
{
"id":1
"name":"user"
"assigned":"2013-06-10"
},
{
"id":1
"name":"admin"
"assigned":"2014-01-09"
}
],
"created":"2014-06-10"
}
如您所见,这里返回了 2 个对象,第一个,我们称之为 "user" 和另一个对象,它是第一个内部的数组,"roles"。已为用户分配了 2 个角色。
假设我想将这些信息逐字加载到我的数据库中。我可以创建 3 个表,'user' 和 'roles' 和 'user_roles',外键链接 user->user_roles->roles。一个用户有多个角色。
CREATE TABLE IF NOT EXISTS `users` (
`id` INT(12) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
`sex` VARCHAR(10) NOT NULL,
`age` SMALLINT(2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `roles` (
`id` INT(12) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
`assigned` DATETIME ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `user_roles` (
`user_id` INT(12) UNSIGNED NOT NULL ,
`role_id` INT(12) UNSIGNED NOT NULL ,
CONSTRAINT `fk_ur_user_id` FOREIGN KEY(`user_id`) REFERENCES users(`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_ur_role_id` FOREIGN KEY(`role_id`) REFERENCES roles(`id`) ON DELETE CASCADE ON UPDATE CASCADE,
UNIQUE `idx_user_id_role_id`(`user_id`, `role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
然后我会使用 artisan 创建 Eloquent 模型,在用户模型中,我会有一个 hasManyThrough('roles', 'user_roles');
将数据从 json 加载到 models/tables 的最快最干净的方法是什么?
我是否只需要一个一个地分配值,或者有没有办法将属性从 json 对象映射到 eloquent 模型?如果可能的话,它是如何处理这种关系的?
我认为可以为每个 table 创建模型,然后使用函数 json_decode
将 JSON 转换为数组,然后使用 Eloquent方法来保存然后。原始示例:
$data = json_decode($json);
User::create($data);
仍然,您需要提取关系数据。原始示例:
$data = json_decode($json);
$roles = $data['roles'];
unset($data['roles']);
$user = User::create($data);
$user->roles()->create($roles);