Laravel"undefined方法Illuminate\Database\Query\Builder :: attach()"

gla*_*ree 11 php laravel eloquent

我试图在Laravel 4中的数据库播种期间关联相关模型.根据这里的文档,我可以这样做:

$user->roles()->attach(1);
Run Code Online (Sandbox Code Playgroud)

所以,在我正在运行的数据库种子中:

$package = Package::create([
    'name' => $faker->word,
    'summary' => $faker->sentence,
    'base_price' => $faker->randomFloat(2, 200, 10000)
]);

// Attach 1-5 randomly selected items to this package
foreach(range(1, 5) as $index)
{
    $randomItem = Item::orderBy(DB::raw('RAND()'))->first();
    $package->items()->attach($randomItem->id);
}
Run Code Online (Sandbox Code Playgroud)

包装物品此时已经播种,并且种子没有问题.上面的代码从Artisan给出了这个:

[BadMethodCallException]                                              
Call to undefined method Illuminate\Database\Query\Builder::attach()
Run Code Online (Sandbox Code Playgroud)

这里的某个人似乎认为该attach()方法实际上并不存在且文档错误,但我发现很难相信.

TL; DR在Eloquent中创建多对多关系的正确方法是什么?

Ton*_*rra 25

该功能items()在你的模型必须返回一个BelongsToMany为了关系到使用的attach() .

public function items() {
  return $this->belongsToMany('Item');
}
Run Code Online (Sandbox Code Playgroud)

  • 就是这样.我认为hasMany和belongsToMany被用于多对多关系 - 实际上就像你说的那样属于两个方面. (2认同)