Laravel 5.0 пытается получить элемент из коллекции «Неопределенное свойство» - PullRequest
0 голосов
/ 22 мая 2019

У меня есть коллекция, которая выглядит следующим образом:

Collection {#322 ▼
  #items: array:2 [▼
    "title" => array:1 [▼
      0 => {#356 ▼
        +"id": 104
        +"block_newsletter_id": 135
        +"item_type": "title"
        +"html_key": ""
        +"content": "aze"
        +"properties": ""
      }
    ]
    "text" => array:1 [▼
      0 => {#357 ▼
        +"id": 105
        +"block_newsletter_id": 135
        +"item_type": "text"
        +"html_key": ""
        +"content": "azee"
        +"properties": ""
      }
    ]
  ]
}

Я построил эту коллекцию следующим образом:

collect($blockItemsContent[$block->pivot->id])->groupBy('item_type')

Я отправляю эту коллекцию на просмотр и пытаюсь получить доступ ксодержимое заголовка вроде этого:

{{ $blockItemsContent->title->content }}

Я получаю следующую ошибку:

Неопределенное свойство: Illuminate \ Support \ Collection :: $ title

Я также пробовал это:

{{ $blockItemsContent['title']->content }}

Это дает мне следующую ошибку:

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

РЕДАКТИРОВАТЬЧто я пытаюсь в моем клинке

<td style="background-color: #ffffff;">
    <table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
        <tbody>
            <tr>
                <td style="padding: 20px; font-family: sans-serif; font-size: 15px; line-height: 20px; color: #555555;">
                    <h1 style="margin: 0 0 10px; font-size: 25px; line-height: 30px; color: #0069b4; font-weight: normal;">
                        {{ $blockItemsContent->title->content }}
                    </h1>
                    <p style="margin: 0 0 10px;">
                        {{ $blockItemsContent->text->content }}
                    </p>
                </td>
            </tr>
        </tbody>
    </table>
</td>

Ответы [ 3 ]

0 голосов
/ 22 мая 2019

Ваша коллекция $blockItemsContent - это массив объектов, а не сам объект.Таким образом, вы должны получить доступ к первой группе через $blockItemsContent->get("title").Это снова массив, который можно зациклить с помощью foreach.

foreach($blockItemsContent->get("title") as $obj) {
  dump($obj);
}

Или:

$blockItemsContent->get("title")->each(function($obj) {
  dump($obj);
});

РЕДАКТИРОВАТЬ:

  • Помните, что ->get("title")возвращает NULL если ключ не найден
  • Если вы не знаете, какие значения для item_type возможны, вы должны перебрать всю коллекцию
0 голосов
/ 22 мая 2019

Это потому, что $blockItemsContent - это коллекция, которая содержит список элементов, сгруппированных по item_type, как вы указали в своем коде, как это

collect($blockItemsContent[$block->pivot->id])->groupBy('item_type')

Поскольку это коллекция, вы должны выполнить цикл, прежде чем иметь доступ к заголовку каждого элемента.

@foreach($blockItemsContent as $item_key => $item_value)

    // Notice that $item-key will contains respectively 'title' and 'text'

    {{ $item_key }} // title or text

    {{ $item_value['content'] }}

@endfor

Обратите внимание, что $item_value является массивом, когда $item_key до title , $item_value будет равно

$item_value = [ "id" => 105, 
    "block_newsletter_id"=> 135, 
    "item_type" => "text", 
    "html_key"=> "",
    "content"=> "azee",
    "properties" => ""
]
0 голосов
/ 22 мая 2019

Вы можете использовать этот код в вашем приложении:

foreach ($blockItemsContent as $key=>$value){
       dd($value->content);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...