我有一个奇怪的问题:我使用此代码将数据保存到数据库表中的一个字段
variable
当我想将数据保存到此表中的另一个字段时,它不会向两个字段保存任何内容。我使用这段代码来做到这一点:
library(reshape2)
my_data_long <- melt(my_data, id.vars = c("Block"))
ggplot(data=my_data_long,aes(x=Block, y=value, fill=variable, color=variable, alpha=variable)) +
geom_bar(stat="identity",position ="identity") +
scale_colour_manual(values=c("lightblue4","red")) +
scale_fill_manual(values=c("lightblue","pink")) +
scale_alpha_manual(values=c(.3, .8))
最后$ ms的内容是输出$ port变量,这样我就可以检查这些值是否正确保存了。 这是$ ms输出:
for ($i = 0; $i < count($arr); $i++) {
if (property_exists((object)$arr[$i], "id")) {
$port = Port::where('id', $arr[$i]->id)->first();
} else {
$port = Port::where('id', $arr[$i][0]->id)->first();
}
$port->company_a_json = json_encode($arr[$i]);
$port->save();
}
注意列“company_a_days”已更新为444,这是所需值,但在物理表中,“company_a_days”的值未更新。
问题是它输出了正确的$ port,但在实际表中没有保存更改。
答案 0 :(得分:1)
在审核了您的代码后,我认为[&#39; company_a_days&#39;]应该已更改,但[&#39; company_a_json&#39;]尚未更改,因为您再次获得对象$ port在获取&#34; days&#34;部分,您应该在第二部分中再次删除$ port。
for ($i = 0; $i < count($arr); $i++) {
if (property_exists((object)$arr[$i], "id")) {
$port = Port::where('id', $arr[$i]->id)->first();
} else {
$port = Port::where('id', $arr[$i][0]->id)->first();
}
$port->company_a_json = json_encode($arr[$i]);
if (property_exists((object)$arr[$i], "days")) {
$daysToSave = json_encode($arr[$i]->days);
} else {
$daysToSave = json_encode($arr[$i][count($arr[$i]) - 1]->days);
}
$port->company_a_days = $daysToSave;
$port->save();
$ms->addMessageTranslated("success", "port after save days " . json_encode($port) . "", $post);
}
答案 1 :(得分:0)
在ukalpa的帮助下,我终于解决了它。
$port
保存到该行两次,即使它在两次保存中都是同一行,我甚至在每次编辑之前将此行拉到$port
两次值和save()。$arr[$i][0]->days
中获取价值,而是使用$arr[$i][count($arr[$i]) - 1]->days
。不要认为这与它为什么不首先更新任何东西有关,因为&#39; company_a_days&#39;列中没有任何值,而不是$arr[$i][0]->days
内的值。还添加了一个检查->days > 0
,但这只是我自己的任务。
for ($i = 0; $i < count($arr); $i++) {
if(property_exists((object)$arr[$i], "id")){
$port = Port::where('id', $arr[$i]->id)->first();
}else{
$port = Port::where('id', $arr[$i][0]->id)->first();
}
$port->company_a_json = json_encode($arr[$i]);
$port->save();
if(property_exists((object)$arr[$i], "days")){
$port = Port::where('id', $arr[$i]->id)->first();
if($arr[$i]->days > 0){
$port->company_a_days = $arr[$i]->days;
$port->save();
}
}else{
$port = Port::where('id', $arr[$i][0]->id)->first();
if($arr[$i][count($arr[$i]) - 1]->days > 0){
$port->company_a_days = $arr[$i][count($arr[$i]) - 1]->days;
$port->save();
}
}
}
$arr
是一个json输入数组,因此$arr[$i]
是一个json输入。
以下是来自$arr[$i]
的示例输入,以使整个解决方案更加清晰:
"[{\"portName\":\"HONG KONG\",\"days\":\"33\",\"id\":\"2\",\"datefrom\":\"02\/01\/2017\",\"dateTo\":\"02\/21\/2017\",\"price_x\":20,\"prices_y\":40}]"
以下是现在提到的列中的更新值:
{\"portName\":\"HONG KONG\",\"days\":\"33\",\"id\":\"2\",\"datefrom\":\"02\/01\/2017\",\"dateTo\":\"02\/21\/2017\",\"price_x\":20,\"prices_y\":40}
。33
。这是一个json是单个对象的例子,并在这些ifs中处理:
if (property_exists((object)$arr[$i], "id"))
if(property_exists((object)$arr[$i], "days"))
与else
部分相反,它处理的json数组也可以作为输入。猜猜它不是最新的代码,但是我在截止日期前至少它现在有效:)
谢谢大家