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 Eloquent,返回带有“belongsTo”对象的 JSON?
Laravel 关系:hasManyThrough、belongsTo、belongsToMany