【问题标题】:Laravel insert relationship in newly created modelLaravel 在新创建的模型中插入关系
【发布时间】:2016-06-16 09:59:20
【问题描述】:

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

app/Character.php

public function characteristics() {
    return $this->hasMany('App\Characteristics');
}

app/Characteristics.php

public function character() {
    return $this->belongsTo('App\Character');
}

然后在控制器中,我有一种方法可以创建具有预定特征集的新角色,如下所示:

app/Http/Controllers/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 必须再次访问数据库?

【问题讨论】:

  • 您在寻找associate吗?
  • getCharacteristics() 返回什么?它是一组特征模型吗?
  • 对不起,我之后直接去吃饭了。 getCharacteristics 确实返回了一个模型数组。

标签: php laravel


【解决方案1】:

我认为您需要先保存角色模型,因为如果您正在构建 hasMany/belongsTo 关系,您的特征表必须有一个 character_id 列,并且当您这样做时$character->characteristics()->saveMany($characteristics); Laravel 将尝试从父模型。根据您共享的代码,您刚刚实例化了模型,此时它还没有关联的 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 在这里有效。

【讨论】:

  • 我做了这些更改(现在更新问题),它仍然有同样的错误。
  • 根据您尝试调用 characterstics() 的错误,而模型中定义的方法名称为 characteristics() .. 感觉就像 missing i 是导致错误的原因..跨度>
  • 哇...谢谢你成为我的第二双眼睛。我将接受您的回答,因为我认为重新排序代码仍然是必要的。
猜你喜欢
  • 1970-01-01
  • 2017-07-30
  • 2021-10-02
  • 2020-07-06
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 2017-10-27
  • 1970-01-01
相关资源
最近更新 更多