首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 5/Faker -工厂数据更改

Laravel 5/Faker -工厂数据更改
EN

Stack Overflow用户
提问于 2016-04-25 15:47:08
回答 1查看 400关注 0票数 0

我最近在Laravel中使用Faker和sqLite内存数据库进行测试,我遇到了一个奇怪的问题,我的模型有一个工厂,除了第一个变量(碰巧也是表的主键)之外的所有东西都被正确设置。

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

代码语言:javascript
复制
'kvk' => strval($faker->randomNumber(9)),

所以它应该变成一个包含9位数字的字符串。现在下一步是从我的控制器测试中调用工厂,我还有另一个用户模型,它使用我公司的这个'kvk‘变量作为外键引用:

代码语言:javascript
复制
$this->_company = factory(Company::class)->create([ 'address_id' => $this->_address->id ]); 
$this->_user = factory(User::class)->create([ 'kvk' => $this->_company->kvk ]); 

但是当我在其间放置一个echo $this->_company->kvk;时,它显示'kvk被设置为1,由于我在工厂中设置的规则,这应该是不可能的。

最后,用户用于模拟测试中的会话,还用于使用以下检查检查我是否应该具有编辑地址的权限:

代码语言:javascript
复制
$user = Auth::user(); 
$company = Company::where('kvk', $user->kvk)->first(); 
$address = Address::whereId($id)->first();

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

因此,首先我获取当前登录的用户(它被模仿为上面创建的用户,并且工作得很好。接下来,我获取与此用户关联的公司(应该是上面创建的公司,因为我使用了company->kvk作为外键引用),但是,当我将保存的company输出到日志时,我看到kvk被设置为9位字符串,这是它应该设置的。

我真的不明白为什么一开始kvk设置为1,然后在我的测试中它看起来完全没有问题,但我的测试失败了,因为我的用户中设置了错误的引用,所以它找不到正确的公司。你知道这是什么原因吗?我还尝试在使用工厂创建时显式设置'kvk‘,但这也不起作用,将仍然输出1。

EN

回答 1

Stack Overflow用户

发布于 2016-04-25 23:03:02

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36834710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档