2015-04-15 66 views
0

好吧,讓我們說我有一個API,它返回json中的數據對象。該對象如下所示。將數據加載到Eloquent模型中

{ 
    "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個對象即回到這裏,第一個,讓我們把它稱爲「用戶」和另一個對象,這是第一次,「角色」裏的數組。有2個角色分配給用戶。

所以我們可以說我想將這些信息逐字地加載到我的數據庫中。我可以創建3個表,'用戶'和'角色'和'user_roles',外鍵鏈接user-> user_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 ; 

然後我會用工匠打造雄辯模型和用戶模型,我想有一個hasManyThrough('roles', 'user_roles');

什麼是從JSON將數據裝入模型的最快和最徹底的方法/表?

我只需要逐一分配值,還是有辦法將屬性從json對象映射到雄辯模型?如果這是可能的,它如何處理關係?

回答

1

我認爲可以爲每個表創建模型,然後使用函數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); 
+0

'$ user-> roles() - > create($ roles);'在'users_roles'表中創建條目嗎? – SynackSA

+0

是的,會的。更多信息http://laravel.com/docs/5.0/eloquent#inserting-related-models –

相關問題