保存Laravel 5.2模型时不存在方法保存

时间:2016-03-09 16:10:10

标签: php laravel laravel-5.2

我有一个简单的表单,其中一个字段是'resource'。我有一个包含许多资源的Item模型。我正试图从我的表单中保存Item和它的Resource。

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');
}

我在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');
}

在Item模型上调用addResource时,我收到此错误:

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

我一直坚持这个太久了!任何帮助将非常感激。我确定这是一个简单的新手错误......

1 个答案:

答案 0 :(得分:1)

您的addResource()方法应如下所示:

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

属性 $this->resource将被解析为相关模型的实际实例。如果尚未关联任何模型,则评估为null方法 $this->resource()实际上会返回模型之间存在的关系类型(在这种情况下,它应该返回Illuminate\Database\Eloquent\Relations\HasMany)。