最近将Faker与sqLite内存数据库结合使用以便在Laravel中进行测试我有一个奇怪的问题,我的模型有一个工厂,除了第一个变量之外的所有东西(它也恰好是表的主键)设置正确。
让我们进一步解释,我指向的变量在工厂中使用以下规则:
'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 ]);
但是当我把回音$ this-> _company-> 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 :(得分:0)
潜入Laravel的源头后,我发现它必须与我的模型。虽然我在模型中设置了主键属性,但我忘了将自动增量布尔值设置为false。这导致我的模型每次将主键保存到数据库时都将主键转换为自动增量整数。这解决了这个问题。