У меня есть многомерный массив из $_POST
, Его ключи точно такие же, как и в столбцах blog_posts
таблица или имена ее отношений (например, author
).
Я хотел бы массово назначить $ _POST для соответствующего объекта и его отношений. Пример:
$_POST = array (
'blog_post' => array (
'title' => 'the title of the post',
'content' => 'the content of the post',
'date' => '23-09-2015',
'author' => array (
'name' => 'hydra',
'age' => 47,
'location' => 'Russia',
),
),
);
будет сопоставлен с blog_post
объект и author
объект.
2 вещи, которые нужно иметь в виду:
мое текущее (очевидно, нерабочее) решение будет включать:
array_walk($_POST, function(value, key){
if (is_array($value) && class_exists($key)) {
$object = new $key($value);
$object->save();
}
});
Это только сохраняет первый объект (blog_post
).
Редактировать: безопасность не моя проблема в данный момент, я буду дезинфицировать $ _POST перед вставкой, но основной проблемой является массовое назначение без необходимости знать, какой класс я использую, и назначать отношения вручную.
Похоже, вам не хватает отношений между blog_post
а также author
, Если у вас есть определенные отношения, вы не сможете сохранить author
потому что будет отсутствовать необходимый внешний ключ.
Это может сработать:
$parent = null;
array_walk($_POST, function(value, key){
if (is_array($value) && class_exists($key)) {
$object = new $key($value);
if(!empty($parent)){
$parent->$key()->save($object); // function author(){$this->hasOne('author');} on blog_post model
}
else{
$object->save();
}
$parent = $object;
}
});
Других решений пока нет …