PHP_EOL 问题 Laravel 播种机

PHP_EOL troubles in Laravel Seeder

我尝试 运行 Laravel seeder.

run() 函数中的以下行
$numbers = <<<EOL
1
2
3
4
EOL;

$array = explode(PHP_EOL, $numbers);

运行php artisan migrate:refresh --seed之后,我注意到$array值为:

Array (
  0 => '1
2
3
4',
)

预期结果是:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)

为什么播种器中的 explode() 函数会忽略行尾?

工作正常

$numbers = <<<EOL
1
2
3
4
EOL;

$array = explode("\n", $numbers)

PHP_EOL的目的是自动为平台选择正确的字符。对于 DOS PHP_EOL - \r\n、mac - \r、unix - \n。在当前情况下,您需要静态使用 \n.

如果您使用 Windows,您使用 Artisan 创建的文件(如播种机)具有 Unix 行结尾 (\n) 而您的编辑器创建的文件可能有 DOS 行结尾 (\r\n)。

在Windows上,PHP_EOL的值是\r\n,seeders的行尾是\n,所以explode()函数不会' t return 预期结果。

选项:

  • 你可以使用explode("\n", $numbers)(使用双引号,而不是单引号)。
  • 或者,使用 explode(PHP_EOL, $numbers) 并为特定文件编辑编辑器的行结束配置(下面的 Sublime Text 示例)。