我正在尝试创建一个资源提供程序数据库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
错误。我在这做错了什么?非常感谢任何帮助,谢谢!
答案 0 :(得分:0)
我想通了,在我的资源管理器中我有一个位置方法:
public function location()
{
$locations = Location::all
return view (compact('locations'));
}

我将newResource
方法更改为:
public function newResource(CreateNewResourceRequest $req)
{
...
$resource->save();
$resource->locations()->attach($locations);
}