如何将另一个表数据插入另一个表laravel 5.2?

时间:2017-10-10 06:17:53

标签: php mysql laravel laravel-5.2

我有两张桌子:

qr_details表:

id     product_id    qrcode_id     created_at           updated_at
1      1             12            2017-10-09 15:36:15  2017-10-09 15:36:15
2      3             13            2017-10-09 15:36:15  2017-10-09 15:36:15

获奖者表:

id     product_id    qrcode_id     winner_name  win_number  created_at           updated_at
1      1             12            hello        5           2017-10-09 15:36:15  2017-10-09 15:36:15
2      3             13            world        6           2017-10-09 15:36:15  2017-10-09 15:36:15

现在我想获得qr_detailsproduct_id& qrcode_id进入winners表。如何在Laravel中查询?我已经制作了一个SQL小提琴 here提前致谢。

3 个答案:

答案 0 :(得分:1)

我真的不明白你的问题,但你可以试试这个:

$datas = DB::table('qr_details ')->get();

foreach($datas as $data){
    DB::table('winners')->insert(['qrcode_id' => $data->qrcode_id, 'product_id'=>$data->product_id, ...bunch other inserts])
}

答案 1 :(得分:1)

我相信您可以执行以下操作:

$query = \DB::connection()->getPdo()->query("select * from qr_details");
$data = $query->fetchAll(\PDO::FETCH_ASSOC);

\DB::table('winners')->insert($data);

这将花费一些时间,并且只需两个查询

答案 2 :(得分:0)

如果要向winners表添加新记录,则可以使用Eloquent模型和insert方法在单个查询中添加多条记录。

$qcodes = Qrcode::all()->map(function(Qrcode $qrcode) {
    return [
        'id' => $qrcode->id,
        'product_id' => $qrcode->product_id,
        'qrcode_id' => $qrcode->qrcode_id,
        'winner_name' => 'some name',
        'win_number' => 5
    ];
});

Winner::insert($qcodes);

然而,根据你所说的猜测,这可能不是你所追求的 - 因为你只想要添加product_idqrcode_id - 换句话说就是更新现有记录。

如果是这种情况,并且如果您的id列在两个表中都匹配,那么您可以执行类似的操作:

$qcodes = Qrcode::all();

$qcodes->each(function(Qrcode $qrcode) {
    Winner::where('id', $qrcode->id)->update([
        'product_id' => $qrcode->product_id,
        'qrcode_id' => $qrcode->qrcode_id
    ]);
});

这再次假设您使用的是Eloquent模型 - 否则您必须使用Query Builder执行此操作:

$qcodes= DB::table('qr_details')->get();

$qcodes->each(function(Qrcode $qrcode) {
    DB::table('winners')
        ->where('id', $qrcode->id)
        ->update([
            'product_id' => $qrcode->product_id,
            'qrcode_id' => $qrcode->qrcode_id
        ]);
});

确保相应更新表/型号名称。

现在,你的sql结构的一个问题是你的winnersproduct_idqrcode_idNOT NULL所以当首次创建记录时它必须有一些数据。如果您要更新这些记录,我建议您将这两列更改为NULL,以便最初他们不需要任何数据。