Итак, давайте скажем, что у меня есть 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 объекта вернулись сюда, а именно, первый, позволяет называть его «пользователь», а другой объект, который представляет собой массив внутри первой, «роли». Для пользователя назначены две роли.
Так что скажем, я хочу загрузить эту информацию в мою БД дословно. Я мог бы создать 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 с красноречивой моделью? Если это возможно, как он справляется с отношениями?
Будет ли '$ user-> role() -> create ($ role);' создавать записи в таблице 'users_roles'? – SynackSA
Да, было бы. Дополнительная информация http://laravel.com/docs/5.0/eloquent#inserting-related-models –