Laravel Eloquent:如何为同一个ID删除多个记录?

vdgimpew  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(100)

我正在做一个Laravel项目,我有一个文章ID数组,我需要从数据库中检索多个记录,以获得相同的ID。然而,当我使用Eloquent时,即使同一个ID在数组中出现多次,我也只得到一个结果。
下面是数组的一个例子:

$articleIds = [5, 5, 5];
$articles = Article::whereIn('id', $articleIds)->get();

我得到的结果只有一条记录,但我希望得到多条记录,因为数组中重复了相同的ID。
如何修改Eloquent查询以检索同一ID的多个记录?
我也试过下面从另一个stack answer

Article::findMany($all_ids)->keyBy('id');
        $blocks = array_map(function ($id) use ($all_record) {
            return $all_record[$id];
        }, $all_ids);

我可以使用循环得到结果,但我不想要那个结果,我想要一个有说服力的或查询(DB)方式的结果。

5lhxktic

5lhxktic1#

一个非常粗略的方法(如@PsyLogic所提到的)是在数组上循环,并为每个ID进行单独的查询:

$articleIds = [5, 5, 5];
$articles = [];

foreach ($articleIds as $articleId) {
    $articles[] = Article::where('id', $articleId)->first();
}

虽然这种方法确实“有效”,但在给定大量ID时,它可能会导致一些严重的性能问题。

0tdrvxhp

0tdrvxhp2#

我能建议的是,

if(count($articlesId) === 1){
 DB::table('articles')->where('id', $articlesId[0]);

}else{

$firstId = $articlesId[0];
array_shift($articlesId)

$articlesQuery = DB::table('articles')
    ->where('id',$firstId);

foreach ($articlesId as $id) {
    $articlesQuery->unionAll(
        DB::table('articles')
        ->where('id', $id)
    );
}
 
$articles = $articlesQuery->get();

}
SELECT * FROM articles WHERE id = 1
UNION ALL
SELECT * FROM articles WHERE id = 1
UNION ALL
SELECT * FROM articles WHERE id = 1

相关问题