Laravel在新创建的模型

时间:2016-06-15 23:11:54

标签: php laravel

我在两个模型之间建立了关系。这两个模型的设置如下:

应用/ 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的情况下获取创建的角色数据库又来了吗?

1 个答案:

答案 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可以在这里工作。