如果存储在数据库中,如何使用Laravel Eloquent访问数组属性?

时间:2019-10-02 06:20:47

标签: laravel eloquent

例如,我将JSON存储在名为“数据”的数据库的行中

External.php(模型)-将“数据”转换为数组:

protected $casts = [
    'data' => 'array',
];

我可以使用Tinker这个命令来访问它:

$external = App\External::first()->pluck('data');

这将返回

 Illuminate\Support\Collection {#3384
     all: [
       [
         "id" => 17566616456845,
         "name" => "#1008",
         "note" => "",
         "tags" => "",
         "test" => false,
         "email" => "katie.jane@example.com",
         "phone" => null,

         ...
         ..
         .

如何访问该集合中的“电子邮件”或“ id”?如何修改tinker雄辩的命令以获取“ id”或“电子邮件”?

  

$ external = App \ External :: all()-> pluck('data')->'email'

     

第1行上的T_STRING或T_VARIABLE或'{'或'$'>消息'属性[电子邮件]上的异常不存在> PHP解析错误:语法错误,意外的T_CONSTANT_ENCAPSED_STRING,   期待

变暖:

>>> $external = App\External::pluck('data')->get('email')
=> null

4 个答案:

答案 0 :(得分:1)

pluck()方法返回数组。因此,如果要访问“电子邮件”,则必须使用。

$external = App\External::first()->pluck('data');

$email = $external['email']; // katie.jane@example.com

答案 1 :(得分:0)

如果您只是想获取一条记录的数据,请使用cast属性作为数组:

// one External record
$external = App\External::first();

$email = $external->data['email'];
$id = $external->data['id'];

答案 2 :(得分:0)

您不必使用pluck()

如果要从外部的数据访问电子邮件。

$email = App\External::first()->data['email'];

更新

获取所有电子邮件。

$emails = App\External::all()
    ->map(function($external) {
        return $external->data['email'];
    });

答案 3 :(得分:0)

尝试一下

$external = collect(App\External::all()->pluck('data'))->pluck('email')->all();