Laravel 从 table 获取 id 并将它们插入另一个 table

Laravel Getting id's from a table and inserting them into another table

正在尝试从 table 中获取匹配的 id's 并在不同关系下将它们再次插入到相同的 table 中。

$contentPack = ContentPack::find($id);
$cloned_pack_goals = DB::table('content_pack_goal')->where('content_pack_id' , $contentPack->id)->get();
$cloned_pack_goal_ids = $cloned_pack_goals->goal_id;

产生异常

Exception
Property [goal_id] does not exist on this collection instance.

dd($cloned_pack_goals); 输出:

Illuminate\Support\Collection {#2466 ▼
      #items: array:2 [▼
        0 => {#3129 ▼
          +"goal_id": 4
          +"content_pack_id": 2
        }
        1 => {#2467 ▼
          +"goal_id": 9
          +"content_pack_id": 2
        }
      ]
    }

如何从输出中获取 goal_ids 以将它们再次插入相同的 table 但具有不同的关系?

$newPack = $contentPack->replicate();
DB::table('content_pack_goal')->insert(['content_pack_id' => $newPack->id,'goal_id' => $cloned_pack_goal_ids]);

我在获取 ID 和插入 ID 时做错了。尝试使用 ->first(); 它有效,但只有一个 id 被插入

要获取仅包含 ID 的数组,请使用 pluck()toArray()

$cloned_pack_goal_ids = DB::table('content_pack_goal')
    ->where('content_pack_id' , $contentPack->id)
    ->pluck('goal_id') // returns a collection of only Ids.
    ->toArray(); // returns an array from the collection.

以这种格式编写您的查询,这将为您提供所需的输出:

$cloned_pack_goals = DB::table('content_pack_goal')->where('content_pack_id' , $contentPack->id)->get()->toArray();
$cloned_pack_goal_ids = $cloned_pack_goals[0]->goal_id;

$cloned_pack_goals是一个集合,所以需要单独排除所有集合记录中的goal_ids。 此代码段可能对您有所帮助:

$cloned_pack_goal_ids = DB::table('content_pack_goal')->where('content_pack_id' , $contentPack->id)->pluck('goal_id')->toArray();

foreach($cloned_pack_goal_ids as $key => $goal_id) {
   DB::table('content_pack_goal')->insert(['content_pack_id' => $newPack->id,'goal_id' => $goal_id]);

}