使用Laravel在表单提交后将两个外键插入数据透视表

时间:2016-07-30 14:30:44

标签: php laravel

我正在尝试创建一个资源提供程序数据库Web应用程序,其中设置了Resource,Location,ResourceLocation(数据透视表)和ContactPerson模型。我非常确定我已经正确设置了模型关系,因为从我的创建新资源表单中将数据插入到数据库中,它只是因为外键(Resource_ID& amp)而无法显示在我的视图中; Location_ID)未插入数据透视表。这是我到目前为止的代码。

模型



class Location extends Model
{
  public function resource()
    {
     return $this->belongsToMany('App\Models\Resource', 'ResourceLocation');
    }
}

class Resource extends Model
{
  public function locations()
    {
        return $this->belongsToMany('App\Models\Location', 'ResourceLocation');
    }
}

class ResourceLocation extends Model
{
    protected $table = 'ResourceLocation';

    public $timestamps = false;

    protected $fillable = [
        'Location_ID',
        'Resource_ID'
    ];  
}




资源控制器



public function newResource(CreateNewResourceRequest $req)
{
    $resource = Resource::create(Request::only(
	  'Name',
	  'Description',
	  'Misc_Info'
    ));

    $location = Location::create(Request::only(
	  'Address',
	  'Address2',
	  'City',
	  'Zip_Code',
	  'County',
	  'Hours',
	  'Appt_Necessary'
    ));
	$resource->save();
		
	$resource->location()->attach($location);

    \Session::flash('flash_message', 'Resource Created Successfully!');

    return redirect('resource');
}




点击表单上的提交按钮后,我收到错误消息:

BadMethodCallException in Builder.php line 2345: Call to undefined method Illuminate\Database\Query\Builder::location()

我的表单中的所有输入都插入到我的数据库表中,但ResourceLocation(数据透视表)保留为空。

如果我$resource->$location()->attach($location['Location_ID']);它会给我Method must be a string错误。我在这做错了什么?非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

我想通了,在我的资源管理器中我有一个位置方法:



public function location()
{
    $locations = Location::all
    return view (compact('locations'));
}




我将newResource方法更改为:



public function newResource(CreateNewResourceRequest $req)
{ 
  ...

  $resource->save();
  $resource->locations()->attach($locations);
}