如何使用关系在laravel中的数据库中插入嵌套的二维数组

Posted

技术标签:

【中文标题】如何使用关系在laravel中的数据库中插入嵌套的二维数组【英文标题】:how to insert a nested 2d array in database in laravel using realtionship 【发布时间】:2019-11-19 20:39:10 【问题描述】:

我正在尝试使用名为 Phone 的现实船来保存 Home 模型,我想为其插入无限的电话。现在我插入 home 没有任何问题,但是当涉及到电话时,我无法将我的 2d 阵列插入到电话中!这是我的控制器:

 $validated = $request->all();
    if (!$validated) 
        return $this->sendError('Validation Error.', $validated->errors());
    

    $home = Home::create($validated);
    $phones = $request->input('phones');
    for ($i =0; $i < count($phones); $i++) 
        $insertPhone[$i] = json_decode($phones[$i]);
    
    dd($insertPhone);
    $home->phones()->createMany($insertPhone);
    return new HomeResource($home);

下面是 $insertPhone 的 dd 结果:

 array:2 [
  0 => #533
    +"value": "123"
    +"is_attachment": "true"
  
  1 => #538
    +"value": "456"
    +"is_attachment": "true"
  
]

【问题讨论】:

具体出了什么问题? 你为什么使用json_decode?我想电话来自输入? @VincentDecaux 它是一个 api,所以我认为它作为参数进入正文 @showdev 它不会只插入空行 【参考方案1】:

createMany 需要一个带有键/值的多维数组,例如:

$home->phones()->createMany([
    [
        'number' => '049230323432',
    ],
    [
        'number' => '432094249023',
    ],
]);

所以你应该这样做:

$phones = $request->input('phones');
$insertPhone = [];
foreach ($phones as $phone) 
    $insertPhone []= [
        'number' => $phone,
    ];

【讨论】:

但考虑一下我从前面收到的内容如下: phones=[ "value":"21351321" , "is_attachment":"true" ] 哦,是的,抱歉没有检查您帖子中的 dd。看起来没问题,你的 $home 在 create 之后设置好了吗?你的关系有效吗? 是的,它有效,我在输入时检查了它,因为将插入硬代码数据

以上是关于如何使用关系在laravel中的数据库中插入嵌套的二维数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中获取嵌套关系的实例?

如何在laravel中获取嵌套关系的数据

Laravel Eloquent:获取嵌套关系中的数据总和并将其添加为新属性

如何从 Laravel 8 Eloquent 中的嵌套关​​系中获取数据?

Laravel 数据表搜索嵌套关系

Laravel 插入嵌套的 Eloquent ORM 模型