Php 数据库播种器在Laravel中不工作
我的目标是根据每24小时更改一次的CSV文件填充我的数据库。这是我的理解,播种机将是完美的这一点,甚至可以被称为编程需要。我整合了基本代码并使用了他们网站上的文档,但是失败了,即使启用了调试,错误消息也没有什么意义 我已经测试并确认了DB连接工作正常,并且注释掉了除“Truncate”行之外的所有种子代码,遗憾的是,这似乎都没有处理。如果我从路径中截断,它会工作,而从播种机的Php 数据库播种器在Laravel中不工作,php,database,laravel,model,Php,Database,Laravel,Model,我的目标是根据每24小时更改一次的CSV文件填充我的数据库。这是我的理解,播种机将是完美的这一点,甚至可以被称为编程需要。我整合了基本代码并使用了他们网站上的文档,但是失败了,即使启用了调试,错误消息也没有什么意义 我已经测试并确认了DB连接工作正常,并且注释掉了除“Truncate”行之外的所有种子代码,遗憾的是,这似乎都没有处理。如果我从路径中截断,它会工作,而从播种机的run()它不会 我如何修复或至少解决此问题 路线: Route::get('seed', function() {
run()
它不会
我如何修复或至少解决此问题
路线:
Route::get('seed', function()
{
Artisan::call('db:seed');
});
播种机:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder
{
public function run()
{
// Empty the 'PLAYERS' Table
DB::table('players')->truncate();
// Fetch the data from our CSV File
$data = $this->seedFromCSV('export.csv', ',');
foreach ($data as $player)
{
DB::table('players')->insert(
[
'name' => $player['First Name'] . " " . $player['Last Name'],
'team' => '0',
'position' => '0',
'played' => $player['Played'],
'injury_status' => $player['Injury Indicator'],
'injury_type' => $player['Injury Details'],
'fd_salary' => $player['Salary'],
'fd_fppg' => $player['FPPG'],
'opponent' => '0'
]
);
}
}
private function seedFromCSV($filename, $deliminator = ",")
{
if(!file_exists($filename) || !is_readable($filename))
{
return FALSE;
}
$header = NULL;
$data = array();
if(($handle = fopen($filename, 'r')) !== FALSE)
{
while(($row = fgetcsv($handle, 1000, $deliminator)) !== FALSE)
{
if(!$header) {
$header = $row;
} else {
$data[] = array_combine($header, $row);
}
}
fclose($handle);
}
return $data;
}
}
DatabaseSeeder类中缺少DB facade的导入 添加以下内容:
use Illuminate\Support\Facades\DB;
DatabaseSeeder类中缺少DB facade的导入 添加以下内容:
use Illuminate\Support\Facades\DB;
这是因为Laravel的播种机无法在生产环境中运行,从而导致超时。要解决此问题,可以将force参数作为true传递,并按预期完成
Artisan::call('db:seed', array('--class' => 'DatabaseSeeder', '--force' => true));
这是因为Laravel的播种机无法在生产环境中运行,从而导致超时。要解决此问题,可以将force参数作为true传递,并按预期完成
Artisan::call('db:seed', array('--class' => 'DatabaseSeeder', '--force' => true));
为什么必须调用特殊路径来为数据库种子?为什么不使用cli命令
php artisan db:seed
?我在共享主机上,Laravel是通过Softaculous安装的。我无法运行直接命令,因为我没有这样做的权限。为什么必须调用特殊路由来为数据库种子?为什么不使用cli命令php artisan db:seed
?我在共享主机上,Laravel是通过Softaculous安装的。我无法运行直接命令,因为我没有这样做的权限。谢谢你的建议。但是我刚刚测试了它,它仍然会超时并显示相同的错误消息。有没有可能获得更多的关于什么导致它失败的详细信息?truncate现在应该可以工作了。。。可能脚本有时需要30秒以上才能运行,因此请尝试更改php.ini
Hmm中的max\u execution\u time
,该日志看起来与浏览器中显示的日志相同。我怀疑它需要更长的时间,实际上有1个DB条目,并且DB在本地主机上。从任何其他位置(如路由、控制器等)运行truncate()行都会立即完成。运行composer dump autoloadSo放弃后,我用shell_exec(“cd../laravel&&php artisan db:seed”)测试了CLI命令;这似乎将工作,但报告应用程序在生产中!命令取消!我需要将cd刻录到public_html下面的laravel目录或该消息是否与它为什么不能按编程方式工作有关?谢谢您的建议。但是我刚刚测试了它,它仍然会超时并显示相同的错误消息。有没有可能获得更多的关于什么导致它失败的详细信息?truncate现在应该可以工作了。。。可能脚本有时需要30秒以上才能运行,因此请尝试更改php.ini
Hmm中的max\u execution\u time
,该日志看起来与浏览器中显示的日志相同。我怀疑它需要更长的时间,实际上有1个DB条目,并且DB在本地主机上。从任何其他位置(如路由、控制器等)运行truncate()行都会立即完成。运行composer dump autoloadSo放弃后,我用shell_exec(“cd../laravel&&php artisan db:seed”)测试了CLI命令;这似乎将工作,但报告应用程序在生产中!命令取消!我需要将cd刻录到public_html下面的laravel目录或该消息是否与它为什么不能按编程方式工作有关?