从动态创建的输入字段

时间:2017-06-14 09:16:24

标签: php mysql laravel laravel-5.4

我有2个型号 Tour.php

public function Itinerary()
{
    return $this->hasMany('App\Itinerary', 'tour_id');
}

Itinerary.php

public function tour() 
{
    return $this->belongsTo('App\Tour', 'tour_id');
}

游览表:

id|title|content

行程表:

id|tour_id|day|itinerary

我已经使用vue js来创建或添加和删除日期的输入字段并动态计划。并使用tour.store方法中的以下代码插入itineraries表:

    $count = count($request->input('day'));
$temp_day        = $request->input('day');
$temp_itinerary  =   $request->input('itinerary');

for($i = 0; $i < $count; ++$i) 
{

    $itinerary = new Itinerary;
    $itinerary->tour_id        =  $tour->id;
    $itinerary->plan      =   $temp_itinerary[$i];        
    $itinerary->day            =   $temp_day[$i];
    $itinerary->save();
}

并且成功插入了记录。并在tour.store方法中应用了相同的代码。它不是更新行,而是向表中插入新行。对此最好的解决方案是什么?

3 个答案:

答案 0 :(得分:2)

对于更新,请尝试此代码

G

答案 1 :(得分:0)

您使用的方式是插入/创建新记录。要更新,您可以使用。

Itinerary::find($tour_id)->update(
   ['column_name'=> value]
);

其中find方法采用表的主键。

这将更新您现有的记录。您可以根据需要更新任意数量的列,只需传入数组update。您也可以使用其他答案中提到的save方法。

检查Laravel Update Eloquent

修改

$iterneary = Itenerary::where('tour_id', $tour_id)->first();

现在,您可以将此iterneary对象更新为您想要的任何内容。

答案 2 :(得分:0)

这就是我做到的。首先保存了$ tours []数组中的所有游览。

foreach($tours as $tour) {
        $itinerary->tour()->updateOrCreate(['id'=> $tour['id']],$tour);
    }

updateOrCreate,因为您可能需要在更新时添加新的游览。我知道这并没有完全回答你的问题,但这至少可以给你一个想法。