我有两张桌子:
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_details
表product_id
& qrcode_id
进入winners
表。如何在Laravel中查询?我已经制作了一个SQL小提琴 here。提前致谢。
答案 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_id
和qrcode_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结构的一个问题是你的winners
表product_id
和qrcode_id
是NOT NULL
所以当首次创建记录时它必须有一些数据。如果您要更新这些记录,我建议您将这两列更改为NULL
,以便最初他们不需要任何数据。