行。让我们说我有一个名为Questions
的模型,由管理员处理。其中每个问题都有一个名为master
的列设置为true
。
如何创建它,以便我可以复制整个数据库表的所有内容并将其复制到同一个表中,并将master
列设置为false
并将user_id
设置为别的什么。
我想知道是否有办法做到这一点,而不是采用老式的方式。
答案 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()