Laravel:将具有关系belongsTo的数组分解到模型

Posted

技术标签:

【中文标题】Laravel:将具有关系belongsTo的数组分解到模型【英文标题】:Laravel : Explode array with relation belongsTo to model 【发布时间】: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 建立关系!!也许你应该改变你的数据库结构,尝试学习规范化以便更好地理解 看看我在类似问题下发布的答案:***.com/a/53386065/4848587 【参考方案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

以上是关于Laravel:将具有关系belongsTo的数组分解到模型的主要内容,如果未能解决你的问题,请参考以下文章

Laravel同步hasMany与belongsTo数组

Laravel 关系不适用于 belongsTo

Laravel Eloquent,返回带有“belongsTo”对象的 JSON?

Laravel 关系:hasManyThrough、belongsTo、belongsToMany

Laravel - 从 ajax 响应数据中的产品 (belongsTo) 访问子类别。

Laravel 中的 BelongsTo 关系