【问题标题】:Laravel Eloquent collection attributesLaravel Eloquent 集合属性
【发布时间】:2017-04-29 15:50:19
【问题描述】:

我正在使用 Laravel 5.2 开发一个 webapp,但有一个我无法解决的问题。

我有一个扩展 Eloquent 模型的模型,但是当我尝试使用“where”输出我的数据库表时,例如

\App\MyModel::where('id_table', 23)->first();

它返回一个集合,其中包含许多目前对我无用的信息,例如“受保护”、“键类型”......并且我的表的数据位于“属性”下。 按照 laravel 的指南,我看到每个人都像我一样简单地使用 where,然后使用 $mytable->myvalue 输出,但这当然不适合我。

这里是我正在谈论的集合的屏幕截图:

当我使用"::where()" 之类的东西时,如何才能始终只获取属性?

我尝试过getAttributes(),但它给了我一个 500 错误。

【问题讨论】:

    标签: php laravel model attributes eloquent


    【解决方案1】:

    如果您只想获得几个属性,可以做很多事情。可能第一种方式最适合您:

    使用pluck():

    \App\MyModel::where('id_table', 23)->pluck('id', 'name');
    

    使用select():

    \App\MyModel::select('id', 'name')->where('id_table', 23)->get();
    

    get() 与参数一起使用:

    \App\MyModel::where('id_table', 23)->get(['id', 'name']);
    

    如果你想获得 Eloquent 集合,然后只构建一个只有属性的数组,你可以使用toArray()

    \App\MyModel::where('id_table', 23)->get()->toArray();
    

    如果您想为新集合获取一些属性,请在集合上使用pluck()

    $collection = \App\MyModel::where('id_table', 23)->get();
    $names = $collection->pluck('name');
    

    【讨论】:

    • 感谢您的回复!你的 toArray() 方法或多或少是我正在寻找的,但我也尝试过 select 和 get ,它们总是返回一个带有 'table'、'primaryKey'、'connection'、'keyType'、'perPage 的集合'(我在我的问题中添加了一张图片)。那么我怎样才能只使用 get() 方法获取属性呢?
    • 我以为你只需要一些属性。在您的情况下,get() 对您没有帮助,请使用 ->get()->toArray() 获取所有属性,而无需任何其他对象属性。