我有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');
}
tours
表:
id|title|content
itineraries
表:
id|tour_id|day|plan
我的商店方法如下所示:
public function store(Request $request)
{
$tour = new Tour;
$tour->title = $request->title;
$tour->content = $request->content;
$tour->save();
$itineraries = [];
$day = $request->input('day');
$plan = $request->input('itinerary');
foreach ($day as $i => $name) {
$itineraries[] = new Itinerary([
'tour_id' => $tour->id,
'plan' => $plan[$i],
'day' => $day[$i],
]);
}
$tour->itinerary()->saveMany($itineraries);
Session::flash('success','Tour is sucessfully created !');
return redirect()->route('tour.show',$tour->id);
}
以下是更新方法的代码:
public function update(Request $request, Tour $tour)
{
$tour->title = $request->title;
$tour->content = $request->content;
$tour->save();
$count = count($request->input('day'));
$temp_day = $request->input('day');
$temp_itinerary = $request->input('itinerary');
$tour_id = $tour->id;
$itinerary = Itinerary::where('tour_id', $tour_id);
for($i = 0; $i <$count; ++$i)
{
$itinerary->updateOrCreate([
'tour_id' => $tour_id,
'plan' => $temp_itinerary[$i],
'day' => $temp_day[$i]
]);
}
Session::flash('success','Tour updated sucessfully !');
return redirect()->route('tour.show',$tour->id);
}
我遇到的麻烦是更新方法是添加新的额外行而不是更新。
后我添加了其他数据day3
&amp; day4
但代码创建的新行包含数据day2
,但不是day1
。自上周以来,一直令人难以置信。我在这里缺少什么,或者我应该在itineraries
表上使用不同的方法进行CRUD操作。请建议。
答案 0 :(得分:0)
我认为updateOrCreate函数的工作方式与您的想法不同。它可以采用两个阵列。如果不存在与第一个数组中给出的所有值匹配的模型,则会创建一个新模型。
在您的情况下,您只使用updateOrCreate的第一个参数,因此您说“如果没有具有此ID,计划和日期的游览:创建具有这些值的新游戏。”
因此,如果您想仅根据现有游览是否与当前ID匹配来更新每个游览,请更改:
$itinerary->updateOrCreate(
['tour_id' => $tour_id, 'plan' => $temp_itinerary[$i], 'day' => $temp_day[$i]]
);
对此:
$itinerary->updateOrCreate(
['tour_id' => $tour_id],
['plan' => $temp_itinerary[$i], 'day' => $temp_day[$i]]
);
编辑:在这里查看(简要)文档:https://laravel.com/docs/5.4/eloquent#inserting-and-updating-models。
答案 1 :(得分:0)
假设如果用户删除特定的动态输入,那么上面的代码是否会删除该记录并更新其他记录?如果有
请说明