我在两个模型之间建立了关系。这两个模型的设置如下:
应用/ Character.php
public function characteristics() {
return $this->hasMany('App\Characteristics');
}
应用/ Characteristics.php
public function character() {
return $this->belongsTo('App\Character');
}
然后在控制器中我有一个方法来创建一个具有一组预定特征的新角色,如下所示:
应用/ HTTP /控制器/ CharacterController.php
public function newCharacter(Request $request) {
$character = new Character();
$characteristics = getCharacteristics($character->id);
// Save basic character stuff
$character->characteristics()->saveMany($characteristics);
$character->save();
}
突出显示的行引发错误,因为saveMany
不是Builder
的函数,所以如何在不必执行find
的情况下获取创建的角色数据库又来了吗?
答案 0 :(得分:1)
我认为你需要首先保存角色模型,因为如果你要构建一个hasMany / belongsTo关系,你的特征表必须有一个character_id列,当你$character->characteristics()->saveMany($characteristics);
时,Laravel会尝试从父模型插入ID。根据您共享的代码,您只是实例化了模型,到目前为止它还没有与之关联的ID。因此,您需要首先保存角色模型,并假设getCharacteristics()
方法返回特征模型的数组/集合,以下应该有效:
public function newCharacter(Request $request) {
$character = new Character();
$character->save();
$characteristics = getCharacteristics();
// Save basic character stuff
$character->characteristics()->saveMany($characteristics);
}
为了进一步澄清这一点,从Character模型中的特征方法中,返回HasMany
而不是Builder
的实例,因此saveMany可以在这里工作。