Laravel数据库种子中的Heredoc

时间:2014-09-26 14:40:30

标签: php xml laravel-4 heredoc nowdoc

我正在尝试在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包含在种子中并不是必须的,但是对于其他开发者而言,为其设置过程保留额外的步骤会更好。

1 个答案:

答案 0 :(得分:3)

您可以改为使用nowdoc,而不是使用heredoc。来自文档:

  

Nowdocs是单引号字符串,heredocs是双引号字符串。类似于heredoc指定了nowdoc,但是在nowdoc内部没有进行解析。

参见deceze的this answer,它给出了两者之间差异的实际例子:

$foo = 'bar';

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

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

$这里是&#34;我在这里,吧!&#34;,而$ now现在是&#34;我现在是,$ foo!&#34;。