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