【发布时间】:2021-09-30 02:53:00
【问题描述】:
假设 模型顺序
class Order extends Model {
use HasFactory;
protected $table = 'order';
protected $primaryKey = 'id';
public $incrementing = false;
protected $keyType = 'string';
protected $guarded = [];
public function extra(){
return $this->hasOne(Extra::class);
}
public function products(){
return $this->hasMany(Product::class);
}
}
和Model Extra
class Extra extends Model {
use HasFactory;
protected $table = 'extra';
protected $guarded = [];
public function order(){
$this->belongsTo(Order::class);
}
}
和模型产品
class Product extends Model {
use HasFactory;
protected $table = 'product';
protected $guarded = [];
public function order(){
return $this->belongsTo(Order::class);
}
}
现在,我从 API 接收数据。有了这些数据,我想提供模型,然后将信息存储到数据库。
有atm的做法是:
foreach ($list as $item) {
$order = new Order();
$order->id = $item['id'];
$order->title = $item['title'];
$order->save();
$extra = new Extra();
$extra->foo= $item['path']['to']['foo'];
$extra->bar= $item['path']['to']['bar'];
$order->extra()->save($extra)
$order->products()->createMany($item['path']['to']['products']);
}
问题是这段代码为每个循环保存了 3 次,1 次用于订购,1 次用于额外,1 次用于产品。 我想知道是否可以使用另一种方法来收集 for-each 内部和外部的数据,以制作类似
Order::insert($array_of_data);
【问题讨论】:
-
是的,只需将要插入的数组保存到数组中,而不是将属性分配给模型并保存
-
@lagbox 感谢您的回答。有没有可能给我看一些代码来理解?此外,关系(一对一,一对多)呢?幕后的东西会照顾他们吗?
-
不,没有什么可以处理这样的事情,
insert无论如何都绕过了 eloquent ...您目前所做的已经足够了,因为您需要保存的记录及其关系 ID -
如果可能的话,添加几行代码!谢谢
标签: php laravel laravel-5 eloquent laravel-8