Я хочу получить несколько дополнительных комментариев.
Как мне не использовать 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>';
-комментарий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>Не знаю, понятно ли я использовал переводчик Google.






Не повторяйте 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>
Это не работает. Почему не использовать эхо в моем контроллере? Спасибо.
Это просто для попытки. Отображать пустые страницы. Если удалить @include ('pages.comment', ['comment' => $ subcomment]) в comment.blade.php отобразить 2x comment1.
Код не обязательно должен был работать без каких-либо корректировок. Цель состояла в том, чтобы показать вам, как рекурсия является решением вашей проблемы. Вы также можете сделать это в контроллере.
Я пытаюсь использовать
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(){} }
Небольшой совет: используйте английский только для кодирования; удачи.