我有一个包含下一个数据的请求
{
"path": "some path",
"site_link": "http://example.com"
"features": [ ... ] //array of strings
}
我希望更新两个表site
和site features
。
site
表包含| id | path | site_link |
。
还有site features
的{{1}}
我不知道确切的“功能”数量,但是我需要在请求后对其进行更新。
有什么方法可以除进行更新以删除它们,然后再次创建。 (某些功能可能会更改,某些功能会删除并添加)。
目前,我没有任何用于更新功能的代码。只有这个
| id | feature | site_id |
答案 0 :(得分:0)
好吧,根据您的情况,您无法更新site_features这样的行。因为您需要在site_features表中第二个标识符。下面的查询仅一次又一次更新第一列。因此,使用create方法保存这些功能create
新行的唯一方法。
如果要更新特定的site_features列,则必须将这些功能的ID传递给控制器
public function update(Request $request, Site $site)
{
// first you need to select a row before updating it
$site = $site->where("site_link",$request->site_link)->first();
$site->update([
"path" => $request->path,
]);
foreach($request->features as $feature){
SiteFeature::where("id",$feature->id)
->update([
"feature" => $feature->content
]);
}
return response()->json($site, 200);
}
如果您还没有id参数,那么,如果这些是新功能,那么您必须为其创建新记录
public function update(Request $request, Site $site)
{
$site = $site->where("site_link",$request->site_link)->first();
$site->update([
"path" => $request->path,
]);
foreach($request->features as $feature){
SiteFeature::create([
"feature" => $feature
]);
}
return response()->json($site, 200);
}
还有第三种方法。如果您的功能有限。例如,关于这些网站只有80个功能。有些网站具有某些功能,而其他网站则没有。.那么您可能想要使用many to many
关系。创建功能表并添加所有功能,并使功能与站点之间的关系多对多。之后,您只需要同步这些功能。它很容易使用。以及当您需要对功能之一进行一些更改时。您无需做大量更改。只需在功能表上更改此功能,即可影响所有网站。
我希望你能理解我,因为我的英语太糟糕了:)
答案 1 :(得分:0)
首先,希望您已经为站点功能表创建了一个模型。很简单 现在
$updates = SiteFeatures :: where ('feature',$feature)->where('site_id',$siteID) ->get();
更新:-
$updates->feature = $newFeature;
$updates->save();
删除:-
$updates->delete();
对于新功能的添加,您不需要第一条陈述 代替
$newFeature = new SiteFeatures();
$newFeature->feature = 'the new feature';
$newFeature->site_id = the_site_id;
$newFeature->save();