来自多维数组的雄辩质量分配以及模型关系

时间:2015-09-23 12:49:12

标签: php arrays laravel-5 eloquent mass-assignment

我有一个来自$_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对象。

要牢记两件事:

  • 这只是一个例子,我不知道我将使用哪种类型的物品;
  • 解决方案也应该可以与对象集合一起使用

我当前(显然是非工作的)解决方案将涉及:

array_walk($_POST, function(value, key){
    if (is_array($value) && class_exists($key)) {
        $object = new $key($value);
        $object->save();
    }
});

这只会保存第一个对象(blog_post)。

编辑:目前我不关心安全性,我会在插入之前清理$ _POST,但主要问题是批量分配,而不必知道我正在使用哪个类并手动分配关系。

1 个答案:

答案 0 :(得分:0)

您似乎错过了 object ZConnection1: TZConnection ControlsCodePage = cGET_ACP AutoEncodeStrings = False Connected = True DesignConnection = True SQLHourGlass = True HostName = 'localhost' Port = 0 Database = 'MATestDB' User = 'sa' Protocol = 'mysql' LibraryLocation = 'D:\aaad7\MySql\libmysql.dll' end object ZQuery1: TZQuery Connection = ZConnection1 Active = True SQL.Strings = ( 'select * from matable1') Params = <> end object DataSource1: TDataSource DataSet = ZQuery1 end object DBGrid1: TDBGrid DataSource = DataSource1 end object DBNavigator1: TDBNavigator DataSource = DataSource1 end blog_post之间的关系。如果您定义了关系,则无法保存author,因为它将缺少必需的外键。

这可能有效:

author