Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 复制整个模型的数据库,并在列发生更改的情况下插入到同一个表中_Php_Laravel - Fatal编程技术网

Php 复制整个模型的数据库,并在列发生更改的情况下插入到同一个表中

Php 复制整个模型的数据库,并在列发生更改的情况下插入到同一个表中,php,laravel,Php,Laravel,嗯。假设我有一个名为“问题”的模型,由管理员处理。每个问题都有一个名为master的专栏,设置为true 如何创建它,以便复制整个数据库表,并将其复制到同一个表中,同时将列master设置为false,user_id设置为其他内容 我想知道是否有一种方法可以代替传统的方法来做这件事。刚刚测试了这个解决方案,效果非常好。根据您的评论: $questions = Questions::all(); $questions = $questions->map(function($i) use($u

嗯。假设我有一个名为“问题”的模型,由管理员处理。每个问题都有一个名为master的专栏,设置为true

如何创建它,以便复制整个数据库表,并将其复制到同一个表中,同时将列master设置为false,user_id设置为其他内容


我想知道是否有一种方法可以代替传统的方法来做这件事。

刚刚测试了这个解决方案,效果非常好。根据您的评论:

$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);
它将只创建一个查询来获取所有数据,并创建一个查询来插入所有修改的数据

$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();
}

我知道这个循环不是很有效,但看起来你只需要做一次。

你需要先抓取所有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();
}
试试这个 $questions=问题::全部; Foreach$问题作为$问题 $q=$q; $q->master=false; $q->保存

也许:$questions=问题:全部。Foreach$questions为$question{$question->master=false;OtherTable::insert$question->toArray;}是否要更新整个数据?或者你想复制整个数据,然后用master=false再次插入?@Sohel0415第二个。看看我的回答。我想复制master=true的每个数据行,并将其粘贴在同一张表上。所以如果我有20行数据,master设置为true。复制/粘贴,现在我有40行,最后20个母版设置为false。那么复制的问题呢?我不想复制已经复制的问题。。。。对吗?你在第1行选择,所以它只会复制那一刻的内容。