2016-04-25 78 views
0

最近在使用Faker与sqLite内存数据库进行Laravel测试时,我有这个奇怪的问题,其中我的模型有一个工厂,除了第一个变量成为表格的主键)正确设置。Laravel 5/Faker - 工厂数据更改

让我们进一步解释,我指向的变量使用以下规则在工厂:

'kvk' => strval($faker->randomNumber(9)), 

因此,它应该成为包含9位数字的字符串。现在,下一步是从我的控制器测试调用工厂,我也有一个使用这种“KVK”变由我公司作为一个外键引用另一个用户模式:

$this->_company = factory(Company::class)->create([ 'address_id' => $this->_address->id ]); 
$this->_user = factory(User::class)->create([ 'kvk' => $this->_company->kvk ]); 

但是当我把回声$此 - > _公司 - > KVK;在这两者之间,它表明'kvk被设置为1,由于我放在我的工厂的规则,这应该是不可能的。

最后用户用来嘲笑测试会话,并也用来请检查是否我应该有权利使用下面的检查,以编辑地址:

$user = Auth::user(); 
$company = Company::where('kvk', $user->kvk)->first(); 
$address = Address::whereId($id)->first(); 

if($company->address_id != $address->id) 
{ 
    return abort(403); 
} 

所以首先我获取当前登录的用户(这是模拟到上面创建的用户,这完美的工作。接下来我得到公司与该用户相关联(应该是上面创建的公司,因为我使用公司 - > KVK作为外键参考) ,但是当我输出保存的公司到我的日志时,我看到kvk被设置为一个9位数的字符串,就像它应该的那样。

我真的不能指责为什么一开始kvk设置为1,然后在我的测试中,它应该是完美的,但是我的测试失败了,因为在我的用户中设置了错误的引用,所以它可以找不到合适的公司。你有什么想法是什么原因呢?我也尝试在创建工厂时明确设置'kvk',但这也不起作用,并且将继续输出1.

回答

0

在深入Laravel的源代码之后,我发现它必须使用我的模型。虽然我在模型中设置了主键属性,但我忘了将自动增量布尔值设置为false。这导致我的模型每次将其保存到数据库时将主键都转换为自动增量整数。这解决了这个问题。