复制整个Model的数据库并插入到同一个表中,并更改了列

时间:2018-01-05 17:25:19

标签: php laravel

行。让我们说我有一个名为Questions的模型,由管理员处理。其中每个问题都有一个名为master的列设置为true

如何创建它,以便我可以复制整个数据库表的所有内容并将其复制到同一个表中,并将master列设置为false并将user_id设置为别的什么。

我想知道是否有办法做到这一点,而不是采用老式的方式。

4 个答案:

答案 0 :(得分:2)

刚测试了这个解决方案,它完美无缺。根据您的意见:

$questions = Questions::all();
$questions = $questions->map(function($i) use($userId) {
    $i = array_except($i, 'id'); // Remove IDs to make insert() work
    $i->master = false;
    $i->user_id = $userId;
    return $i;
})->toArray();
Questions::insert($questions);

它将只创建一个查询以获取所有数据,并创建一个查询以插入所有已修改的数据。

答案 1 :(得分:1)

你需要首先获取master = true的所有记录,如 -

$questions = Questions:where('master',true)->get();

或以前的所有记录,如

$questions = Questions:all();

之后再次插入 -

 foreach ( $questions as $question ) { 
    $question->master=false;
    $question->user_id=$your_other_user_id;
    $q = new Questions();
    $q=$question->replicate();
    $q->save();
}

答案 2 :(得分:0)

$questions = Questions:all();

foreach ( $questions as $question ) { 
    $question->master = false;
    $q = new Questions(); // Model should be singular
    // copy fields here (maybe it can be done faster, but it works)
    $q->master = $question->master;
    $q->save();
}

我知道这个循环效率不高,但看起来你只会这样做一次。

答案 3 :(得分:0)

试试这个 $questions=Questions::all(); Foreach($questions as $question) $q=$question-replicate(); $q->master=false; $q->save()