Laravel multi foreach

Я хочу получить несколько дополнительных комментариев.

Как мне не использовать foreach () {foreach () {}} ...

У меня есть три модели:

Модель strony.php

    class Strony extends Model
{
        public function komenty() {
        return $this->belongsToMany('App\Comment', 'taxonomies')->withPivot('parent_id');
    }
    public function sub() {
        return $this->belongsToMany('App\Comment', 'taxonomies', 'parent_id');
    }}

Модель taxonomy.php

class Taxonomy extends Model
{
    protected $table = 'comments';


    public function tax() 
    {
        return $this->belongsToMany('App\Comment','taxonomies', 'parent_id', 'comment_id')->withPivot('parent_id');
    }
}

Модель comment.php

class Comment extends Model
{
public function subcomment() {
        return $this->belongsToMany('App\Comment', 'taxonomies', 'parent_id');
    }
    }

controller.php

echo '<ul>';
foreach($str->komenty as $g) {
$numer = $g->pivot->comment_id;
$child = $g->pivot->parent_id;

if ($child == null) {
echo '<li>' . $g->title;

$cmt = Comment::find($numer);

$sub1 = $cmt;

echo '<ul>';
foreach($sub1->subcomment as $sub2) {
    echo '<li>' . $sub2->title . '</li>';

   echo '<ul>';
    foreach($sub2->subcomment as $sub3) {

            echo '<li>' . $sub3->title . '</li>';
            echo '<ul>';
            foreach($sub3->subcomment as $sub4) {
                echo '<li>' . $sub4->title . '</li>';
            }
            echo '</ul>';
    }
    echo '</ul>';
}

echo '</ul>';
echo '</li>';

}
}
echo '</ul>';

Таблица это моя таблица sql Laravel multi foreach

-комментарий1

--comment3

--- комментарий2

--- комментарий4

---- комментарий6

--comment5

<ul><li>comment1<ul><li>comment3</li><ul><li>comment2</li><ul></ul><li>comment4</li><ul><li>comment6</li></ul></ul><li>comment5</li><ul></ul></ul></li></ul>

Небольшой совет: используйте английский только для кодирования; удачи.

Kyslik 11.03.2018 18:28

Не знаю, понятно ли я использовал переводчик Google.

Pawells 11.03.2018 18:33
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Не повторяйте HTML-код в вашем контроллере, используйте представления: https://laravel.com/docs/5.6/views

Создайте два представления и используйте рекурсивное включение.

comment.blade.php:

<ul>
    @foreach($comment->subcomment as $subcomment)
        <li>{{ $comment->title }}</li>
        @include('comment', ['comment' => $subcomment])
    @endforeach
</ul>

comments.blade.php:

<ul>
    @foreach($str->komenty as $comment)
        @if (is_null($comment->pivot->parent_id))
            <li>{{ $comment->title }}</li>
            @include('comment', ['comment' => $comment])
        @endif
    @endforeach
</ul>

Это не работает. Почему не использовать эхо в моем контроллере? Спасибо.

Pawells 11.03.2018 19:57

Это просто для попытки. Отображать пустые страницы. Если удалить @include ('pages.comment', ['comment' => $ subcomment]) в comment.blade.php отобразить 2x comment1.

Pawells 11.03.2018 20:17

Код не обязательно должен был работать без каких-либо корректировок. Цель состояла в том, чтобы показать вам, как рекурсия является решением вашей проблемы. Вы также можете сделать это в контроллере.

Jonas Staudenmeir 11.03.2018 20:39

Я пытаюсь использовать

 foreach($str->komenty as $g) {
$numer = $g->pivot->comment_id;
$child = $g->pivot->parent_id;

if ($child == null) {

echo $g->title . '<br>';
$cmt = Comment::find($numer);

$sub2 = $cmt;
$i = 1;
$o = 2;

while($i < 5) {
    $i++;
    $o++;
    if (isset(${'sub'.$i}->subcomment)) {
foreach(${'sub'.$i}->subcomment as ${'sub'.$o}) {
    $num = ${'sub'.$o}->pivot->comment_id;
    echo ${'sub'.$o}->title . '<br>';
}}}}}

Работает только последний элемент.

Потому что это делает foreach(){} foreach(){}, а не foreach(){ foreach(){} }

Другие вопросы по теме