Как получить доступ к свойствам массива с помощью Laravel Eloquent, если они хранятся в базе данных? - PullRequest
0 голосов
/ 02 октября 2019

Например, у меня JSON хранится в строке базы данных с именем «data»

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,

         ...
         ..
         .

Как мне получить доступ к "электронной почте" или "идентификатору" из этой коллекции? Как мне изменить команду tinker eloquent, чтобы получить «id» или «email»?

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

T_STRING или T_VARIABLE или '{' или '$' в строке 1> Исключение с сообщением 'Свойство [email] не существует в этом> Ошибка синтаксического анализа PHP: ошибка синтаксиса,неожиданно T_CONSTANT_ENCAPSED_STRING, ожидая

Становится теплее:

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

Ответы [ 4 ]

1 голос
/ 02 октября 2019

метод pluck () возвращает массив. Так что если вы хотите получить доступ к «электронной почте», вы должны использовать.

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

$email = $external['email']; // katie.jane@example.com
0 голосов
/ 02 октября 2019

Попробуйте это

$external = collect(App\External::all()->pluck('data'))->pluck('email')->all();
0 голосов
/ 02 октября 2019

Вам не нужно использовать pluck().

, если вы хотите получить доступ к электронной почте из данных внешнего устройства.

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

ОБНОВЛЕНИЕ

, чтобы получить все электронные письма.

$emails = App\External::all()
    ->map(function($external) {
        return $external->data['email'];
    });
0 голосов
/ 02 октября 2019

Если вы просто пытаетесь получить данные для одной записи, используйте атрибут cast в качестве массива:

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

$email = $external->data['email'];
$id = $external->data['id'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...