使用eloquent将多个字段保存到数据库

时间:2017-02-12 09:58:13

标签: php mysql laravel server eloquent

我有一个奇怪的问题:我使用此代码将数据保存到数据库表中的一个字段

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,但在实际表中没有保存更改。

2 个答案:

答案 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的帮助下,我终于解决了它。

  • 我使用json_encode保存到&#39; company_a_json&#39;并使用json_encode保存到&#39; company_a_days&#39;。
  • 此外,我将$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}]"

以下是现在提到的列中的更新值:

  • company_a_json:{\"portName\":\"HONG KONG\",\"days\":\"33\",\"id\":\"2\",\"datefrom\":\"02\/01\/2017\",\"dateTo\":\"02\/21\/2017\",\"price_x\":20,\"prices_y\":40}
  • company_a_days:33

这是一个json是单个对象的例子,并在这些ifs中处理:

  • if (property_exists((object)$arr[$i], "id"))
  • if(property_exists((object)$arr[$i], "days"))

    else部分相反,它处理的json数组也可以作为输入。猜猜它不是最新的代码,但是我在截止日期前至少它现在有效:)

谢谢大家