查询关系表

时间:2014-05-07 22:00:48

标签: laravel eloquent

我有三张桌子。

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,但没有运气。我只获得了第一个结果。

2 个答案:

答案 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循环。