mysql 如何在laravel 5.2中插入另一个表中的数据?

mqxuamgl  于 2024-01-05  发布在  Mysql
关注(0)|答案(4)|浏览(297)

我有两张table:

qr_details表:

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

字符串

获奖名单:

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


现在我想得到qr_detailsproduct_idqrcode_idwinners表.我如何在Laravel中查询做到这一点?我已经做了一个SQL Fiddle**这里.**提前感谢.

nhjlsmyf

nhjlsmyf1#

我相信你可以这样做:

  1. $query = \DB::connection()->getPdo()->query("select * from qr_details");
  2. $data = $query->fetchAll(\PDO::FETCH_ASSOC);
  3. \DB::table('winners')->insert($data);

字符串
这将需要一点时间和两个查询

ltskdhd1

ltskdhd12#

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

  1. $datas = DB::table('qr_details ')->get();
  2. foreach($datas as $data){
  3. DB::table('winners')->insert(['qrcode_id' => $data->qrcode_id, 'product_id'=>$data->product_id, ...bunch other inserts])
  4. }

字符串

woobm2wo

woobm2wo3#

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

  1. $qcodes = Qrcode::all()->map(function(Qrcode $qrcode) {
  2. return [
  3. 'id' => $qrcode->id,
  4. 'product_id' => $qrcode->product_id,
  5. 'qrcode_id' => $qrcode->qrcode_id,
  6. 'winner_name' => 'some name',
  7. 'win_number' => 5
  8. ];
  9. });
  10. Winner::insert($qcodes);

字符串
然而,从您所说的猜测,这可能不是您想要的-因为您只希望添加product_idqrcode_id-换句话说,更新现有记录。
如果是这种情况,并且如果id列在两个表中都匹配,那么您可以执行类似于以下操作:

  1. $qcodes = Qrcode::all();
  2. $qcodes->each(function(Qrcode $qrcode) {
  3. Winner::where('id', $qrcode->id)->update([
  4. 'product_id' => $qrcode->product_id,
  5. 'qrcode_id' => $qrcode->qrcode_id
  6. ]);
  7. });


这再次假设您使用的是Eloquent模型-否则您必须使用Query Builder

  1. $qcodes= DB::table('qr_details')->get();
  2. $qcodes->each(function(Qrcode $qrcode) {
  3. DB::table('winners')
  4. ->where('id', $qrcode->id)
  5. ->update([
  6. 'product_id' => $qrcode->product_id,
  7. 'qrcode_id' => $qrcode->qrcode_id
  8. ]);
  9. });


确保相应地更新表/模型名称。
现在,你的sql结构的一个问题是,你的winnersproduct_idqrcode_idNOT NULL,所以它必须有一些数据,当第一次创建记录时。如果你要更新这些记录,我建议将这两列改为NULL,这样最初它们就不需要任何数据。

展开查看全部
kx7yvsdv

kx7yvsdv4#

我知道这个晚,但有人寻找解决方案,你可以使用chunk laravel函数.你的表有大量的记录,考虑使用批处理的方法,以避免内存问题.

  1. Table1::chunk(200, function ($table1Data) {
  2. foreach ($table1Data as $record) {
  3. // Create and save records in table2
  4. }
  5. });

字符串

相关问题