首页 文章

如何在Laravel模型工厂中使用特性?

提问于
浏览
0

如果Model factroy如下所示,那么如何在这里使用Trait getData()?

这段代码不起作用 .

<?php

use App\Working;
use App\Traits\Calculate;

...

    $factory->define(App\Working::class, function  (Faker\Generator $faker) {        
       ...    
       $getData = $this->getData();        
       ...     
       return['get_data' => $getData];

    }

Error message:

Symfony \ Component \ Debug \ Exception \ FatalThrowableError:调用未定义的方法Illuminate \ Database \ Eloquent \ Factory :: getData()

Exception trace:

1 Illuminate \ Database \ Eloquent \ Factory :: (对象(Faker \ Generator),[])G:\ test \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Eloquent \ FactoryBuilder.php:263

2 call_user_func(Object(Closure),Object(Faker \ Generator),[])G:\ test \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Eloquent \ FactoryBuilder.php:263

1 回答

  • 3

    可能不是你想要的东西但是这里有:

    您可以创建一个内联类,该类定义一个返回您要使用的实际函数的函数 . 内联类可以使用特征 .

    注意:PHP 7中添加了匿名类

    <?php
    
    use App\Working;
    use App\Traits\Calculate;
    
    // ...
    $factory->define(App\Working::class, (new class {
         use Calculate;
         public function generatorFunction() {
             return function (Faker\Generator $faker) {
                 // ...
                 $getData = $this->getData();
                 // ...
                 return ['get_data' => $getData];
    
             };
         }
     })->generatorFunction());
    

相关问题