所以我在注意力和服务/程序之间有一种多对多的关系.

病人有很多注意力,注意力属于病人.

当我开始关注程序(多对多关系)时,问题就出现了

我根据Laravel文档转换数据,使用集合.

$procedures = Procedure::all()->mapWithKeys(function ($procedure,$key) {
            return [$procedure['id'] => [
                'price' => $procedure['price'],
                'price_USD' => $procedure['price_USD'],
                'amount' => rand(1, 10),
            ]];
        });

这将返回一个值密钥对,其中数组密钥是过程id.

但当我试图将程序与注意联系起来时.

$attention->procedures()->attach($procedures->random(rand(1,10))->all());

迁移抛出了一个错误.

经过一段时间的调试,这就是ray抛出的结果.

程序:

array:3 [▼
  0 => array:3 [▼
    "price" => 439.39
    "price_USD" => 17.87
    "amount" => 1
  ]
  1 => array:3 [▼
    "price" => 287.39
    "price_USD" => 11.69
    "amount" => 4
  ]
  2 => array:3 [▼
    "price" => 0.68
    "price_USD" => 0.03
    "amount" => 8
  ]
]

查询:

insert into
  `attention_procedure` (
    `amount`,
    `attention_id`,
    `price`,
    `price_USD`,
    `procedure_id`
  )
values
  (8, 1, 651.72, 26.51, 0),
  (10, 1, 403.18, 16.4, 1),
  (10, 1, 629.08, 25.59, 2),
  (10, 1, 930.84, 37.86, 3),
  (6, 1, 330.7, 13.45, 4),
  (5, 1, 629.53, 25.61, 5),
  (2, 1, 241.81, 9.84, 6),
  (10, 1, 354.68, 14.43, 7)

正如你所见,it's trying to insert 0 as one of the procedure ids是不存在的.

如何使集合返回过程id作为数组键?

推荐答案

我认为mapWithKeys是可以的,但当你这样做时,random只会得到值:

->attach($procedures->random(rand(1,10))->all())

try 在查询中获取一些随机记录并映射它们:

$procedures = Procedure::inRandomOrder()->limit(rand(1,10))->get()
    ->mapWithKeys(function ($procedure,$key) {             
        return [$procedure['id'] => [                 
            'price' => $procedure['price'],                 
            'price_USD' => $procedure['price_USD'],                 
            'amount' => rand(1, 10),             
        ]];         
    })
    ->toArray();

然后插入:

$attention->procedures()->attach($procedures);

这样,您也将减轻数据库和php的工作,因为需要处理的记录会更少.

Laravel相关问答推荐

从8.0更新到10.0后,图像不再上传到存储

Laravel复选框值更新

当两个外键都在同一个表上时创建直通关系

Laravel查询多对多关系

Laravel 连接表

如何使用 Laravel 查询生成器在 WHERE 条件周围添加括号

未捕获的 TypeError:Vue.component 不是函数

Laravel 错误ReflectionException-类 App\Http\Kernel 不存在

Laravel 5.4 存储:下载文件.文件不存在,但显然存在

静态密码在默认的 Laravel 用户工厂中是如何工作的?

artisan 迁移错误找不到类'Doctrine\\DBAL\\Driver\\PDOMySql\\Driver'

Laravel 从现有模型生成迁移

如何处理 laravel 5 中的私有图像?

如果值存在于另一个字段数组中,Laravel 验证规则

Laravel Socialite 在本地主机上进行测试,SSL 证书问题?

Select,where JSON 包含数组

向 Laravel 重定向添加一个锚点

Laravel - 使用 Eloquent 查询构建器在 Select 中添加自定义列

如何使 Laravel (Blade) 文本字段只读

Laravel or where