【发布时间】:2021-09-29 17:27:04
【问题描述】:
我正在尝试在数据库中存储一个复杂的对象。有很多关系,例如一对一和一对多。一切正常,但目前我正在 foreach 循环中进行保存,这是不正确的。
foreach($list as $item){
$objA = new ObjA();
$objA->id = $item['id'];
$objA->save();
$objB = new ObjB();
$objB->name = $item['key']['name'];
$objA->extra()->save($objB);
foreach ($item['data']['products'] as $pr) {
$product = new Product();
$product->name = $pr['name'];
$objA->products()->save($product);
}
}
这是代码 atm,但我需要在 foreach 之外执行查询。 我怎样才能做到这一点? 产品和额外的方法是这样的:
public function extra(){
return $this->hasOne(ObjB::class);
}
【问题讨论】:
-
在提供的源中,您使用 $product 作为循环的值 THEN 作为 Product 类的新实例。所以循环的值被覆盖了。
-
此外,现在我做了类似 $final_array = array(); toArray()); id = $item['id']; 之后最后在 foreach ObjA::insert($final_array );但问题是关系存在
-
@Armage,谢谢你的评论,我修好了!但是,我的问题不在于它不起作用!它有效,我正在寻找一种方法来进行适当的重构,以免在 for-each 循环中调用 save 方法。我需要以某种方式收集所有内容,并在 for-each 之外制作 MyClass::insert($allthedata)
标签: php laravel eloquent laravel-8 eloquent-relationship