我正在与Laravel 5.6
合作,发现自己在扩展项目功能时遇到了一个奇怪的问题。
现在我需要创建两个新模型:order
和item
。使用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可以解决我的问题,但是该项目的规范要求我必须保持现状。
答案 0 :(得分:1)
您的呼叫
$company = Company::get()->random(1);
不返回单个公司。它返回一个Collection,该Collection没有动态 users 用户。试试
$company = Company::get()->random(1)->first();