【问题标题】:Laravel : Explode array with relation belongsTo to modelLaravel:将具有关系belongsTo的数组分解到模型
【发布时间】:2018-08-09 02:22:37
【问题描述】:

我想分解数组值并使用此代码成功地做到了:

@foreach(explode('.', $comment->topic_id) as $topic)
    {{ $topic }}
@endforeach

这是输出

Topic : 1,2

问题是,我想实现与topic_id 的关系belongsTo。当我添加关系并运行代码时,不幸的是只显示了一个值。

@foreach(explode('.', $comment->getTopic->topic) as $topic)
    {{ $topic }}
@endforeach

这是我的模特

public function getTopic()
{
    return $this->belongsTo('App\Topic', 'topic_id', 'id');
}

输出:

Topic : Laravel

调用这个数组的正确方法是什么?请帮我。谢谢。

【问题讨论】:

  • 您的关系是错误的,因为您的topic_id 是逗号分隔值,但您正在与 id 建立关系!!也许你应该改变你的数据库结构,尝试学习规范化以便更好地理解
  • 看看我在类似问题下发布的答案:stackoverflow.com/a/53386065/4848587

标签: php arrays laravel


【解决方案1】:
 @foreach(explode(',', $item->chapter_id) as $layer)
                            <?php
                                $chapters = DB::table('topic_types')->where('id', $layer)->get();
                             ?>
                                @foreach ($chapters as $ch)
                                    {{$ch->name}} <br>
                                @endforeach
                            @endforeach

【讨论】:

  • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请edit您的回答添加一些解释,包括您所做的假设。
【解决方案2】:

在这种情况下,您不能使用 relationship。如果您只是寻找solution,那么您可以执行以下操作:

<?php $topic_ids = explode('.', $comment->topic_id);
      $topics = App\Topic::whereIn(id, $topic_ids)->get();
?>

@foreach($topics as $topic)
{{ $topic }}
@endforeach

顺便说一句,你应该更有效地 structure 你的 database

【讨论】:

  • 我可以知道我应该如何构建我的数据库以及这样做的权利吗? @Sohel0415
猜你喜欢
  • 2020-12-24
  • 1970-01-01
  • 2023-02-16
  • 2014-09-01
  • 1970-01-01
  • 2016-04-26
  • 2016-02-29
  • 1970-01-01
  • 2022-11-22
相关资源
最近更新 更多