如何修复错误方法 Illuminate\Database\Query\Builder::attach 不存在。附加多个项目

How to fix error Method Illuminate\Database\Query\Builder::attach does not exist. Attaching multiple items

我正在尝试将 "items model" 附加到“事件模型。

物品型号:

public function events()
{
   return $this->belongsToMany('App\Event', 'event_item');
}

事件模型

public function items()
{
   return $this->belongsToMany('App\Item', 'event_item');
}

用户模型

public function items()
{
   return $this->hasMany('App\Item', 'user_id');
}

事件控制器

public function store(Request $request)
{
  // Get user
  $user = $request->user();

  // Create event
  $event = Event::create(array_merge($request->all(), ['user_id' => $user->id]));

  // Attach items to event
  $user->items()->attach($event->id);

}

我的用户有多个项目。所有用户项目都需要附加到商店功能上的事件。 我收到此错误方法 Illuminate\Database\Query\Builder::attach 不存在。

用户模型:

 return $this->hasMany('App\Item', 'item_id');

您的 User model items 函数必须 return BelongsToMany 关系才能使用 attach()。

用户模型:

public function items() {
      return $this->belongsToMany('App\Item');
    }

我能够弄清楚这一点,实际上很容易出错。我想将项目附加到事件,但在我最初的问题中,我有用户附加到项目。

更改了这个:

// Attach items to event
$user->items()->attach($event->id);

为此:

// Attach items to event
$event->items()->attach($user->items);

现在按预期工作。