1

例如,我有一个UserFactory.php

<?php

use App\User;
use Faker\Generator as Faker;
use Illuminate\Support\Str;

$factory->define(User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'email_verified_at' => now(),
        'role' => 'USER',
        'password' => 'sasdcsdf34', // password
        'remember_token' => Str::random(10),
    ];
});

现在,我可以创建一个用户如下

$user = factory(User::class)->create();

现在,如何将此$user对象转换为包含用户信息(如姓名、电子邮件等)的数组,而无需初始化新数组并手动分配每个$user对象属性。??

我不想像下面这样手动分配,因为如果$user对象中有很多属性会很乏味


       $userArray=[     
            'id' => $user->id,
            'name' => $user->name,
            'email' => $user->email 
             ]

我已经尝试过了,但是它创建了包含各种其他属性的数组,并且需要的实际值嵌套在属性中

$userArray=array($user)
4

4 回答 4

2

您应该尝试使用工厂的原始方法而不是创建。

$user = factory(User::class)->raw();

这应该为您提供一个可以使用的数组。

于 2020-06-26T09:58:27.007 回答
2

尝试将这样的内容添加到您的模型类中:

public function getArr(){
        foreach($this->attributes as $key => $val){
            $array[$key] = $val;
        }
        return $array;
    }

如果您希望在每个模型中都有此功能,您可以使用此功能创建特征,然后将其附加到模型类或任何扩展它的类中。

于 2020-01-23T12:52:34.220 回答
0

对于 Laravel 8,不要使用 make 或 create 方法,而是使用:

User::factory()->raw();

这将返回一个数组

于 2021-07-20T07:50:10.080 回答
0

您可以使用json_decode.

// Laravel 7
$userArray = json_decode(factory(User::class)->create(), true);

// Laravel 8
$userArray = json_decode(User::factory()->create(), true);
于 2021-03-05T14:26:53.073 回答