Laravel 5.6-在ModelFactory中使用模型函数

时间:2018-08-31 17:46:48

标签: laravel laravel-5.6

我正在与Laravel 5.6合作,发现自己在扩展项目功能时遇到了一个奇怪的问题。

现在我需要创建两个新模型:orderitem。使用Faker和Laravel Factories / Seeders用虚拟数据填充item表非常容易。最大的问题是在使用order模型时。

这个小家伙与一个外键为company的{​​{1}}和一个外键为company_id的{​​{1}}有关。公司字段还可以,麻烦就出在我的user

此卖家需要与我的工厂会随机选择的公司相关的seller_id,因为该用户与该公司没有直接关系,而我不能仅凭{{1} }。

为了使所有与我公司“相关”的用户,我在seller_id模型上创建了下一个函数:

role

顺便说一句:我正在使用company_id,这是Spatie制造的库。

此功能的作用是从Company获取每个public function users() { $roles = $this->roles; $users = []; foreach ($roles as $role) { foreach ($role->users as $user) { $user->makeHidden(['pivot']); array_push($users, $user); } } $users = array_unique_objects($users); return $users; } ,然后将其推送到一系列用户。

此自定义帮助程序:laravel-permissions会跟踪阵列中的所有重复用户并将其删除。

可以找到该功能,因为我已经在几个控制器上进行了测试,所以我知道它没有问题。无论哪种方式,我的role都是这样的:

company

但是当我运行array_unique_objects命令时,它将在控制台中引发下一个错误:

  

BadMethodCallException:方法Illuminate \ Database \ Eloquent \ Collection :: users不存在。

     

在> /home/ironman/Documentos/Sandbox/Proventas/Backend/vendor/laravel/framework/src/Illuminate/Support/Traits/Macroable.php:99中   95 | * /   96 |公共功能__call($ method,$ parameters)   97 | {   98 |如果(!static :: hasMacro($ method)){    99 |抛出新的BadMethodCallException(sprintf(   100 | '方法%s ::%s不存在。',static :: class,$ method   101 | ));   102 | }   103 |

     

异常跟踪:

     

1 Illuminate \ Support \ Collection :: __ call(“ users”,[])   /home/ironman/Documentos/Sandbox/Proventas/Backend/database/factories/OrderFactory.php:10

     

2 Illuminate \ Database \ Eloquent \ Factory :: {closure}(Object(Faker \ Generator),[])   /home/ironman/Documentos/Sandbox/Proventas/Backend/vendor/laravel/framework/src/Illuminate/Database/Eloquent/FactoryBuilder.php:274

     

请使用参数-v查看更多详细信息。

有什么我可以解决的问题吗?我知道使用Laravel Relationships可以解决我的问题,但是该项目的规范要求我必须保持现状。

1 个答案:

答案 0 :(得分:1)

您的呼叫

$company = Company::get()->random(1);

不返回单个公司。它返回一个Collection,该Collection没有动态 users 用户。试试

$company = Company::get()->random(1)->first();