且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

表格中的嵌套模型关系-Laravel

更新时间:2023-12-02 20:51:28

您在正确的位置上输入了名称.

You are on the right track with the input names.

表格

// Form open, Person fields, etc...

<h2>Addresses</h2>
@foreach ($addresses as $address)

    <fieldset>

        {{ Input::text('addresses['.$address->id.'][address_1]', $address->address_1) }}
        {{ Input::text('addresses['.$address->id.'][address_1]', $address->address_2) }}
        {{ Input::text('addresses['.$address->id.'][city]', $address->city) }}
        {{ Input::text('addresses['.$address->id.'][state]', $address->state) }}
        {{ Input::text('addresses['.$address->id.'][zip]', $address->zip) }}

    </fieldset>

@endforeach

// Form Close

如果要添加地址,则需要生成一些随机密钥来代替地址ID.这样会将字段分组.

If you want to add addresses you'll need to generate some random key to use instead of the address id. This will keep the fields grouped.

控制器逻辑

这就是我处理输入的方式,使用可填充"过滤进入模型的数据.

This is how I would handle input, using 'fillable' to filter the data going into the models.

// Get the Person model, fill, save, etc...

$addressIds = array();
foreach (Input::get('addresses', array()) as $id => $addressData)
{
    $address = Address::find($id) ?: new Address;
    $address->fill($addressData);
    $address->save();
    $addressIds[] = $address->id;
}

$changes = $person->addresses()->sync($addressIds);

// Delete the unused addresses
foreach ($changes['detached'] as $detachedAddressId)
{
    $address = Address::find($detachedAddressId);
    if (!empty($address)) $address->delete();
}