如何在 laravel 中使用 foreach 将数据添加到数据库中

Posted

技术标签:

【中文标题】如何在 laravel 中使用 foreach 将数据添加到数据库中【英文标题】:how to add data into to database with foreach in laravel 【发布时间】:2019-11-27 03:52:55 【问题描述】:

我想将post表中的所有数据移到CityPost表中,我用foreach但是为什么只有一个数据条目,

 $store = new CityPost;
           $post = Post::all();
           foreach($post as $p)
               $store->user_id = 14; 
               $store->title = $v->title;
               $store->desc = $v->desc;
               $store->save();
           
           dd($store);

我希望PostCity 表中的所有user_id 都是14

【问题讨论】:

因为您在第一次保存后只创建了一个新模型实例,所以它现在有一个 id,之后每次调用保存只是对同一记录的更新 【参考方案1】:

你应该在 foreach 中创建 CityPost 模型:

       $post = Post::all();
       foreach($post as $p)
           $store = new CityPost;
           $store->user_id = 14; 
           $store->title = $v->title;
           $store->desc = $v->desc;
           $store->save();        
       
       dd($store);

【讨论】:

【参考方案2】:

你可以尝试不同的方式,如下所示

$post = Post::all();
$stores = [];
foreach($post as $p)
    $store = new CityPost;
    $store->user_id = 14; 
    $store->title = $v->title;
    $store->desc = $v->desc;
    $stores[] = $store->save();

   //if $store->save() is boolean then you can use create method use save() or create() only one

   $new = CityPost::create(['user_id'=>14,'title'=>$p->title,'desc'=>$p->desc]);
   $stores[] = $new;

dd($stores);

或者您可以尝试其他方式,例如批量更新,而无需多次调用 DB

    $post = Post::all();
    $data = [];
    foreach($post as $p)
        $store->user_id = 14; 
        $store->title = $v->title;
        $store->desc = $v->desc;
        $data[] = ['user_id'=>$store->user_id,'title'=>$p->title,'desc'=>$p->desc];
    
    CityPost::insert($data);

【讨论】:

save 返回一个布尔值,在您的第一个示例中,您正在更新 $store 而不是创建新实例,这与 OP 目前在其代码中遇到的问题相同 顺便说一句,save 是否返回 bool 不存在问题,它确实返回 bool ...感谢您澄清您的回答 :) 我把两者都放了,所以开发者可以选择更喜欢的一个。我希望他不会同时使用这两种方法:)

以上是关于如何在 laravel 中使用 foreach 将数据添加到数据库中的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 8 中使用 foreach 从多选中保存数据?

如何在 laravel 中使用 foreach 从 json 文件中获取所有数据?

如何在 Laravel 的 PHP/Blade 中使用 Foreach 循环?

如何在刀片模板的 foreach 循环中访问 laravel 集合?

如何使用 js 在刀片 laravel 中的 foreach 上更新变量

如何在laravel中的foreach循环中传递多个变量