Laravel - toArray() 与 getAttributes()

Nik*_*j V 4 php laravel eloquent

我正在使用 laravel 6 并使用 eloquent join 来显示来自多个表的数据。

考虑以下代码:

    $ToGetDefaultAddress 
    = TbPersonaddress::join('tb_cities AS TbCitie','TbCitie.n_CityId_PK', '=', 'tb_personaddresses.n_CityId_FK')
                    ->join('tb_counties AS TbCountie','TbCountie.n_CountyId_PK', '=', 'tb_personaddresses.n_CountyId_FK')
                    ->join('tb_states AS TbState', 'TbState.n_StateId_PK','=' ,'tb_personaddresses.n_StateId_FK')
                    ->select('tb_personaddresses.n_PersonAddressesId_PK','tb_personaddresses.n_PersonId_FK',
                    'tb_personaddresses.d_EffectiveDateFrom','tb_personaddresses.d_EffectiveDateTo',
                    'TbCitie.s_CityCode','TbCitie.s_CityName','TbCountie.s_CountyCode',
                    'TbCountie.s_CountyName','TbState.s_StateCode','TbState.s_StateName')->first();

                    dd("Actual output:::::",$ToGetDefaultAddress);
Run Code Online (Sandbox Code Playgroud)

实际输出:在此处输入图片说明

如上面的代码所示,我将此输出存储在$ToGetDefaultAddress变量中。现在只得到了属性数据,都toArray()getAttributes()回报我同样的结果。

例如:

$DefaultAddress = $ToGetDefaultAddress->toArray();
Run Code Online (Sandbox Code Playgroud)

$DefaultAddress = $ToGetDefaultAddress->getAttributes();
Run Code Online (Sandbox Code Playgroud)

返回相同的输出,如下所示: 在此处输入图片说明

我的问题是, usingtoArray()和 有getAttributes()什么区别?推荐哪一款?何时使用toArray(),何时使用getAttributes()

Mal*_*dze 5

让我们看一下源代码:

如果您查看它们,您将看到该toArray()方法返回具有关系和属性的完整模型,并且getAttributes()仅返回模型属性(通常仅返回列)。

这是来自 laravel 源代码的代码片段:

    /**
     * Convert the model instance to an array.
     *
     * @return array
     */
    public function toArray()
    {
        return array_merge($this->attributesToArray(), $this->relationsToArray());
    }
Run Code Online (Sandbox Code Playgroud)

我在源代码中看到了一种我不知道的方法。你也可以测试一下:->attributesToArray()