"pictures" 3 => -6ren">
gpt4 book ai didi

php - Laravel:与数组的额外字段同步

转载 作者:可可西里 更新时间:2023-11-01 00:00:10 29 4
gpt4 key购买 nike

我试图将数据保存在一个数据透视表中,其中包含一个名为数据的额外字段。

当我保存时我有这个数组:

 [
5 => "files"
4 => "pictures"
3 => "tags"
1 => "thumbs"
]

我的表格是这样的:

  • 项目编号
  • option_id
  • 姓名

上面显示的id是指数据库中的option_id和要命名的字符串。

当我尝试像这样使用同步时:$project->options()->sync($data);

$data就是上面显示的数组

我收到一个错误,那就是它试图用"file"保存 option_id。

以下是我如何构建用于同步的数据:

我试图得到你的建议,但不知道如何实现它:

这是我构建数组的方式:

foreach($request->input('option_id') as $id) {
$option['option_id'][] = $id;
$option['data'][] = $request->input('data')[$id];
}

$data = array_combine($option['option_id'], $option['data']);

最佳答案

这包含在 manual 中:

Adding Pivot Data When Syncing

You may also associate other pivot table values with the given IDs:

$user->roles()->sync(array(1 => array('expires' => true)));

在您的示例中,您必须将数组更改为如下所示,但我相信这会转化为:

$data = [
5 => [ 'name' => "files" ],
4 => [ 'name' => "pictures" ],
3 => [ 'name' => "tags" ],
1 => [ 'name' => "thumbs" ],
];

$project->options()->sync($data);

我相信您可能还需要修改您的 Project 模型与您的 Options 模型的关联方式:

// File: app/model/Project.php
public function options()
{
return $this->belongsToMany('Option')->withPivot('name');
}

链接到的手册页中也指出了这一点:

By default, only the keys will be present on the pivot object. If your pivot table contains extra attributes, you must specify them when defining the relationship.

更新

尝试像这样创建您的 $data 数组:

$data = [];
foreach($request->input('option_id') as $id) {
$data[$id] = [ 'name' => $request->input('data')[$id] ];
}

关于php - Laravel:与数组的额外字段同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28903692/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com