动态添加和更新字段

时间:2017-03-01 19:16:06

标签: php jquery laravel

我尝试使用以下部分和jQuery来允许用户添加/更新/删除服务记录。我有一个"添加服务按钮"绑定到jquery函数,该函数基本上检索部分并将一组新的服务记录字段附加到现有服务列表中。

//添加现有行的Jquery函数

$(document).on('click','#add_service', function(e){
    if (service_count > max_services)
    {
       alert('The maximum number of service records for this person has been reached'); 
    }
    else
    {
    $.get("/service_fields", function( result ) {
            // result contains whatever that request returned
             service_count++;
            $('#service_field').append(result);                    
        }, 'html');  // or 'text', 'xml', 'more'
    }
    e.preventDefault();    
});

服务字段(部分):

    Service Date
    <input type="text" name="service[{{ isset($service->id) ? $service->id : ''     }}][service_date]" >

    Service Provided <select name="service[{{ isset($service->id) ? $service->id : '' }}][service_categorytype_id]" >
          <option value="1">Mentoring</option>
          <option value="2">Personal Counseling</option>
    </select>
    Comment <textarea name="{{ isset($service->id) ? $service->id : '' }}][comment]" ></textarea>

    <input type="button" name="delete_button" value="Delete Service" >
</div>

问题在于通过添加新服务记录来编辑记录。如果没有索引值($ service-id),每个字段最终将作为一个单独的数组,类似于下面显示的内容。处理这个问题的最佳方法是什么?我有一个想法是给每个记录一个递增的索引数组值[0,1,2,3],并有一个隐藏字段,其中包含用于更新现有记录的$ service-&gt; id,但我不知道&#39;我知道我是否过于复杂化。感谢

Array
(
[3] => Array
    (
        [service_date] => 02/06/2017
        [service_category_id] => 1
        [comment] => Referred to another program to help me out or something

    )

[4] => Array
    (
        [service_date] => 02/02/2017
        [service_category_id] => 3
        [comment] => This record preceeds the other service
     )

[5] => Array
    (
        [service_date] => 12/22/2016
        [service_category_id] => 7
        [comment] => Another record

    )

[6] => Array
    (
        [service_date] => 03/01/2017
    )

[7] => Array
    (
        [service_category_id] => 10
    )

[8] => Array
    (
        [comment] => Yet another record
    )

)

在我找到构建服务记录数组的方法之后,我计划在控制器逻辑上工作,但这是我到目前为止所拥有的。我正在考虑使用数组中的服务记录id值(作为隐藏字段或使用服务记录ID作为索引值)

我有一个参与者表,它与服务表有一个hasMany关系

//添加控制器逻辑

public function store(Requests\StoreParticipant $request)
{ 
  foreach ($request->services as $row => $innerArray)
    {

        $service = \App\Models\Service::find($row);

        foreach ($innerArray as $innerRow => $value)
        {
            $service->$innerRow = $value;
        }

        $service->save();        

    }
}

//更新操作

public function update(Request $request, $id)
    {

        $participant = Participant::find($id);

        foreach ($request->services as $row => $innerArray)
        {

        $service = \App\Models\Service::find($row);

            foreach ($innerArray as $innerRow => $value)
            {
                 $service->$innerRow = $value;
            }

            $service->save();        

    }

1 个答案:

答案 0 :(得分:0)

我建议你的HTML看起来像这样:

Service Date
<input type="text" name="date[]"/>

Service Provided
<select name="categorytype_id[]">
      <option value="1">Mentoring</option>
      <option value="2">Personal Counseling</option>
</select>
Comment <textarea name="comment[]" ></textarea>

<input type="hidden" name="id[]" value={{ $service->id }}"/>
<input type="button" name="delete_button" value="Delete Service" >

让您的Javascript生成相同的元素,但将PHP值$service->id替换为“new”。

当您处理POST请求时,您将得到以下内容:

Array
(
    [date] => Array
        (
            [0] => 2017-01-01
            [1] => 2017-02-02
            [2] => 2017-03-03
        )

    [categorytype_id] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [comment] => Array
        (
            [0] => existing
            [1] => another existing
            [2] => new
        )

    [id] => Array
        (
            [0] => 4
            [1] => 5
            [2] => new
        )

)

只要您看到“新”ID,您就会知道自己正在处理新记录。