当我尝试创建与其父级关联的子模型时,我遇到了问题。
我有2个型号:
当我点击一个机构并且我去show.blade.php,我有一个表格来为该机构创建一个地址时,我无法从请求中获得将子项与父项相关联的字段“instituion_id”。
这显示在请求中:
请求数据
从表格我打电话给以下路线:action =“/ institution / {{$ institution-> id}} / addresses”
这是AddressController中的代码:
var curVal = $("#propertyValueSliderValue").val();
curVal = parseInt(curVal.replace(/,/g, ""))
当我测试它时,数据库要求输入isntitution_id列:
SQLSTATE [HY000]:常规错误:1364字段'institution_id'没有 有一个默认值(SQL:插入
public function store(Request $request) { // dd($request->all()); Address::create($request->all()); return back(); }
(addresses
,address_name
,address_number
,address_full_name
,address_city
,address_state
,address_postal_code
,address_country
,updated_at
)值(a,a,a,a,a,a,a,2017-12-14 14:06:47,2017-12-14 14:06:47))
那么,我如何从表格中传递“institution_id”字段,如何在控制器中获取并与子记录相关联?
我阅读了很多帖子,但在所有帖子中,他们只是创建一个包含一个字段的子记录,但我想处理所有Addres字段的完成请求。
此致
答案 0 :(得分:3)
您可以从store
方法的参数中访问ID,如下所示:
在路线档案中:
Route::post('/institution/{institution_id}/addresses', 'YourController@store')
在控制器中:
public function store($institution_id, Request $request)
{
$request->request->add(['institution_id' => $institution_id]);
// dd($request->all());
Address::create($request->all());
return back();
}
Ps:别忘了将institution_id
添加到地址模型中的可填写字段。
答案 1 :(得分:1)
如果设置了所有关系,则文档中包含您要查找的内容 https://laravel.com/docs/5.5/eloquent-relationships#the-create-method 例如:
// Routes (If laravel version > 5.2 web.php I guess
Route::post('/institution/{institution_id}/addresses', 'Controller@store')
// app/Http/Controllers/Controller.php
public function store(Request $request)
{
$institution = Institution::find($request->institution_id);
$address = $institution->addresses()->create($request->all());
return back();
}
// app/Institution.php
class Institution extends Model
{
public function addresses()
{
return $this->hasMany('App\Address', 'institution_id', 'id');
}
}
答案 2 :(得分:0)
这就是我的做法。我有2个模型/控制器:网站和访客。访客取决于网站。
路线:
Route::resource('website', 'WebsiteController');
Route::resource('website/{website}/visitor', 'VisitorController');
不要忘记设置所有关系。在“网站”模型中,我只会向您展示用于保存数据的那个:
public function visitors()
{
return $this->hasMany('App\Visitor');
}
然后,在VisitorController内部的商店中:
public function store(Request $request, Website $website)
{
return response()->json(
$website->visitors()->create([
... fields without website_id (the relationship field) ...
]),
201
);
}