Laravel HasMany创建子记录

时间:2017-12-14 14:09:15

标签: laravel laravel-5

当我尝试创建与其父级关联的子模型时,我遇到了问题。

我有2个型号:

  • Instituion(有很多地址)
  • 地址(有1个机构)

当我点击一个机构并且我去show.blade.php,我有一个表格来为该机构创建一个地址时,我无法从请求中获得将子项与父项相关联的字段“instituion_id”。

这显示在请求中:

请求数据

enter image description here

从表格我打电话给以下路线: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_nameaddress_numberaddress_full_name,   address_cityaddress_stateaddress_postal_code,   address_countryupdated_at)值(a,a,a,a,a,a,a,2017-12-14   14:06:47,2017-12-14 14:06:47))

那么,我如何从表格中传递“institution_id”字段,如何在控制器中获取并与子记录相关联?

我阅读了很多帖子,但在所有帖子中,他们只是创建一个包含一个字段的子记录,但我想处理所有Addres字段的完成请求。

此致

3 个答案:

答案 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
    );
}