Php Laravel 4播种多行,artisan停止
我正在将一个非常旧的项目迁移到laravel,我想用我的旧内容将数据库植入新数据库 以下是我如何为我的一张表执行此操作的示例:Php Laravel 4播种多行,artisan停止,php,mysql,laravel,laravel-4,Php,Mysql,Laravel,Laravel 4,我正在将一个非常旧的项目迁移到laravel,我想用我的旧内容将数据库植入新数据库 以下是我如何为我的一张表执行此操作的示例: <?php class CallsTableSeeder extends Seeder { public function run() { $hostname = 'localhost'; $username = 'root'; $password = 'root'; $link
<?php
class CallsTableSeeder extends Seeder {
public function run()
{
$hostname = 'localhost';
$username = 'root';
$password = 'root';
$link = mysql_connect($hostname, $username, $password);
mysql_select_db('olddatabase');
$callselect = 'SELECT * FROM calls';
$ressource = mysql_query($callselect);
$calls = array();
while($item = mysql_fetch_object($ressource))
{
$calls['id']=$item->id;
$calls['author_name']=$item->author_name;
$calls['comments']=$item->comment;
DB::table('calls')->insert($calls);
}
}
}
要查找发生了什么,为什么不抛出一个错误??
试着把你的代码放在事务中,所有的魔法都会发生在你身上
DB::transaction(function(){
//transaction_code_here
});
顺便说一下,迁移完成后,您可以通过以下方式运行所需的特定种子:
php artisan db:seed --class=CallsTableSeeder
您可以截断Calls表,这样它就可以清理并重置autoincrement
意味着将代码更改为:
<?php
class CallsTableSeeder extends Seeder {
public function run()
{
$hostname = 'localhost';
$username = 'root';
$password = 'root';
$link = mysql_connect($hostname, $username, $password);
mysql_select_db('olddatabase');
$callselect = 'SELECT * FROM calls';
$ressource = mysql_query($callselect);
$calls = array();
DB::table('calls')->truncate(); //ADDED BY ME
DB::transaction(function(){ //ADDED BY ME
while($item = mysql_fetch_object($ressource))
{
$calls['id']=$item->id;
$calls['author_name']=$item->author_name;
$calls['comments']=$item->comment;
DB::table('calls')->insert($calls);
}
}); //ADDED BY ME
}
}
您可能已经超时了。。。您可以尝试为PHP超时添加更多时间set\u time\u limit(3600)代码>(1小时),但如果还不够,就更难了(可能会在数据库中添加一个字段“is_migrated”,并使用队列系统)
只是出于好奇,一个简单的解决方案
insert into db2.table1 (field1, field2, field3)
select field1, field2, field3 from db1.table1
不起作用?它应该会更快…我试着只为这个表运行seed,但问题仍然存在,我也会尝试你的其他建议。migrate:refresh--seed命令的工作原理与之前的代码完全相同,但单独运行时,它确实给了我一个错误:无法截断外键约束中引用的表,因此我想我无法截断该表?我更喜欢使用seed方法,这样,我可以在开发过程中轻松回滚(如果需要),并从迁移中获益。不过,时间限制建议确实有所帮助。我在php.ini中更改了它,现在它可以正常工作了,谢谢。
insert into db2.table1 (field1, field2, field3)
select field1, field2, field3 from db1.table1