我有三张桌子。
tasks
| id | title|
|----+------|
| 1 | Blah |
| 2 | Blah |
| 3 | Blah |
tags
| id | tag |
|----+--------|
| 1 | house |
| 2 | garden |
| 3 | bath |
task_tags
| id | task_id | tag_id |
|----+---------|--------|
| 1 | 1 | 1 |
| 2 | 1 | 3 |
| 3 | 2 | 1 |
我想通过Eloquent解决,以便从我的任务模型中呈现标签名称。 我尝试使用hasManyThrough,但没有运气。我只获得了第一个结果。
答案 0 :(得分:3)
class Task extends Eloquent {
public function tags(){
return $this->belongsToMany('Tag');
}
}
然后你可以这样做:
$tasks= Task::with('tags')->get();
foreach ($tasks as $task) {
foreach($task->tags as tag)
echo $tag->name;
}
有关详细信息,请查看many-to-many relations
答案 1 :(得分:0)
您的数据透视表不遵循Laravel命名约定(在这种情况下为tag_task
),因此您需要在关系定义中指定表名,如下所示:
class Task extends \Eloquent {
public function tags(){
return $this->belongsToMany('Tag', 'task_tags');
}
}
外键名称没问题,所以Eloquent会知道它们。 打印结果像@Razor建议的foreach循环。