Laravel 8 中的方法 Illuminate\Database\Eloquent\Collection::attach 不存在错误

Tim*_*282 5 laravel laravel-8

我试图为产品添加类别。我想用项目和类别之间的几个表来做到这一点。我在控制器中创建了一个函数将其发送到数据库。但是,当我想发送它时,出现以下错误,并且我不知道可以修复它。方法 Illuminate\Database\Eloquent\Collection::attach 不存在。

控制器:

public function store(ItemsValidatorRequest $request)
    {
        if ($files = $request->image) {
            $destinationPath = 'images';
            $profileImage = date('YmdHis') . "." . $files->getClientOriginalExtension();
            $files->move($destinationPath, $profileImage);
        }
        else {
            return redirect()->back()->with('warning', 'Mislukt');
        }
        $user = Auth::user()->id;

        Item::create([
            'user_id' => $user,
            'item_title' => $request->titel,
            'item_img' => $profileImage,
            'item_description' => $request->beschrijving,
            'item_price' => $request->prijs,
            'item_slug' => $this->slugify($request->titel)
        ]);

        $items = Item::latest()->get();
   

     // line where it goes wrong
        $items->each->categories()->attach($request->categories);

        return redirect()
            ->route('admin.items.index')
            ->with('success', 'Het item is toegevoegd aan je verlanglijst');
    }
Run Code Online (Sandbox Code Playgroud)

我的模型:

public function categories()
    {
        return $this->belongsToMany('App\Models\Category');
    }
Run Code Online (Sandbox Code Playgroud)

mrh*_*rhn 2

Laravels高阶函数调用,采用单个方法调用,而不是多个。因此,如果您在类上创建一个辅助方法Item,它将解决您的问题。

class Item {
    public function attachCategories($categories) {
        $this->categories()->attach($categories);
    }
}
Run Code Online (Sandbox Code Playgroud)

这将使像这样分配类别成为可能。

$items->each->attachCategories($request->categories);
Run Code Online (Sandbox Code Playgroud)