Eloquent updateOrInsert

时间:2017-05-14 19:05:09

标签: eloquent

我希望eloquent能够使用以下命令自动提供created_at和updated_at字段

                DB::table('partida')->updateOrInsert(
                    [
                        'rodada' => $values->rodada,
                        'mandante_fk' => $value->clube_casa_id,
                        'visitante_fk' => $value->clube_visitante_id
                    ],
                    [
                        'partida_id' => $key,
                        'rodada' => $values->rodada,
                        'mandante_fk' => $value->clube_casa_id,
                        'visitante_fk' => $value->clube_visitante_id,
                        'partida_data' => (string)$value->partida_data,
                        'placar_mandante' => $value->placar_oficial_mandante,
                        'placar_visitante' => $value->placar_oficial_visitante,
                        'local' => (string)$value->local
                    ]
                );

3 个答案:

答案 0 :(得分:0)

你想要的是 Eloquent 的一部分。虽然您使用的是查询生成器

如果您想继续使用查询生成器,我建议您在数组中附加以下内容。

                DB::table('partida')->updateOrInsert(
                [
                    'rodada' => $values->rodada,
                    'mandante_fk' => $value->clube_casa_id,
                    'visitante_fk' => $value->clube_visitante_id,
                    'created_at' =>  \Carbon\Carbon::now(),
                    'updated_at' => \Carbon\Carbon::now()
                ],
                [
                    'partida_id' => $key,
                    'rodada' => $values->rodada,
                    'mandante_fk' => $value->clube_casa_id,
                    'visitante_fk' => $value->clube_visitante_id,
                    'partida_data' => (string)$value->partida_data,
                    'placar_mandante' => $value->placar_oficial_mandante,
                    'placar_visitante' => $value->placar_oficial_visitante,
                    'local' => (string)$value->local,
                    'created_at' =>  \Carbon\Carbon::now(),
                    'updated_at' => \Carbon\Carbon::now()
                ]
            );

答案 1 :(得分:0)

如果要正确使用Eloquent方法,请使用Eloquent而不是查询构建器。

您实际上可以使用updateOrCreate()方法执行相同操作,如果模型定义了时间戳,则会设置时间戳。

你会得到类似的东西(假设存在Partida模型):

Partida::updateOrCreate([
        'rodada' => $values->rodada,
        'mandante_fk' => $value->clube_casa_id,
        'visitante_fk' => $value->clube_visitante_id
    ],
    [
        'partida_id' => $key,
        'rodada' => $values->rodada,
        'mandante_fk' => $value->clube_casa_id,
        'visitante_fk' => $value->clube_visitante_id,
        'partida_data' => (string)$value->partida_data,
        'placar_mandante' => $value->placar_oficial_mandante,
        'placar_visitante' => $value->placar_oficial_visitante,
        'local' => (string)$value->local
    ]);

答案 2 :(得分:0)

您需要使用 upsert() 方法。

https://laravel.com/docs/8.x/queries#upserts