1

我正在尝试在 laravel 中创建一个数据库种子,它使用 heredoc 将 xml 结构设置为变量,然后将该变量用作种子中的值之一:

class CodeTableSeeder extends Seeder {

    public function run()
    {

        DB::table('code')->delete();

        $xml = <<<RawXML
<?xml version="1.0"?>
<fmxmlsnippet type="FMObjectList">
    ...
RawXML;

        Code::create(array('user_id' => 1, 'code' => $xml));
    }
}

当我运行播种机时,我从工匠那里收到一条错误消息:

Seeded: UserTableSeeder

  [ErrorException]                 
  Undefined variable: searchValue  

我知道这searchValue是在 xml 代码中:

    <Script includeInMenu="True" runFullAccess="False" id="1" name="Perform a Find (searchValue, searchField, LayoutName)">

似乎数据库播种器正在将 xml 文档作为代码而不是 heredoc 字符串读取。有没有办法阻止播种机读取 xml?有没有更好的方法将 xml 包含在种子中?

将 xml 包含在种子中并不是必须的,但最好在其他开发人员的设置过程中保留一个额外的步骤。

4

1 回答 1

3

您可以使用 nowdoc 而不是使用heredoc。从文档中:

Nowdocs 是单引号字符串,就像 heredocs 是双引号字符串。nowdoc 的指定与heredoc 类似,但在nowdoc 内部不进行解析。

另请参阅deceze 的这个答案,它给出了两者之间差异的实际示例:

$foo = 'bar';

$here = <<<HERE
    I'm here, $foo!
HERE;

$now = <<<'NOW'
    I'm now, $foo!
NOW;

$here 是“我在这里,酒吧!”,而 $now 是“我现在,$foo!”。

于 2014-09-26T14:49:02.827 回答