Saving method does not exist while saving Laravel 5.2 model

I have a simple form, one of the fields is “resource”. I have an Item model that has many resources. I am trying to save both an element and its resource from my form.

Item.php:

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

public function addResource(Resource $resource)
{
    return $this->resource->save($resource);
}

Resource.php:

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

My save method in ItemsController:

public function store(CreateItemRequest $request)
{
    //get and save Item
    $item = new Item($request->all());
    Auth::user()->item()->save($item);

    //get and save Resource
    $resource = new Resource(array($request->input('resource')));
    $item->addResource($resource);

    return view('items.index');
}

When calling addResource on the Item model, I get this error:

BadMethodCallException in Macroable.php line 81:
Method save does not exist.
in Macroable.php line 81
at Collection->__call('save', array(object(Resource))) in Item.php line 41
at Item->addResource(object(Resource)) in ItemsController.php line 73
at ItemsController->store(object(CreateItemRequest))
at call_user_func_array(array(object(ItemsController), 'store'), array(object(CreateItemRequest))) in Controller.php line 76

I've been stuck on this for too long! Any help is appreciated. I am sure this is a simple mistake for beginners ...

+1
source share
1 answer

Your method addResource()should look like this:

public function addResource(Resource $resource)
{
    $this->resource()->attach($resource->id);
}

$this->resource . , null. $this->resource() , ( Illuminate\Database\Eloquent\Relations\HasMany).

+1

Source: https://habr.com/ru/post/1663722/


All Articles