Как получить доступ к данным из массива, когда он находится внутри объекта std? Ошибка: недопустимое смещение строки 'id' - PullRequest
0 голосов
/ 09 октября 2019

Как получить доступ к этому объекту массива в Laravel 6, используя Eloquent?

        [line_items] => Array
            (
                [0] => stdClass Object
                    (
                        [id] => 4088662196333
                        [variant_id] => 29653605285997
$external = DB::table('orders')->pluck('import_order_data');
...
foreach ($external as $key => $val) {
...
Cart::updateOrCreate([
   'line_item_id' => ['line_item_id' => $val['id']],
],

ErrorException
Недопустимое смещение строки 'id'

Если я изменю его на:

'line_item_id' => ['line_item_id' => $val->id],

Я получу ошибку:

ErrorException
Попытка получить свойство 'id' необъекта

Если я изменю его на:

'line_item_id' => ['line_item_id' => $val['line_items']->id],

Я получу ошибку:

Недопустимое смещение строки 'line_items'

РЕДАКТИРОВАТЬ: проблема была:

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

Теперь я могу получить к нему доступ следующим образом:

   dd($val['line_items'][0]['id']);

, который обеспечивает:

4092309209197

или

dd($val['line_items']);

, которыйпредоставляет:

array:1 [▼
  0 => array:26 [▼
    "id" => 4092309209197
    "sku" => "1605"
    "name" => "Printer Ink"

Какие-либо более удобные варианты доступа к данным?

РЕДАКТИРОВАТЬ: Ответ:

foreach ($val['line_items'] as $index => $lineItem) {
    dd($lineItem['id']);

Что обеспечивает:

4092309209197

Это разумный способ сделать это?

1 Ответ

0 голосов
/ 09 октября 2019

Если я правильно понимаю, ваш массив выглядит так:

$arr = [
           [
               "id" => 4092309209197,
               "sku" => "1605",
               "name" => "Printer Ink",
                ....etc.....
           ]
];

Отлично. Во-первых, поскольку во внешнем массиве есть только один элемент, вы можете сделать это:

$innerArr = $arr[0];

Теперь у вас есть это:

$innerArr = [
    "id" => 4092309209197,
    "sku" => "1605",
    "name" => "Printer Ink",
    ....etc.....
]

И вы можете получить к нему доступ так:

echo $innerArr["id"];
echo $innerArr["sku"];
....etc....

Или вот так:

foreach($innerArr as $key => $val){
    echo $key.": ".$val."\r\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...