У меня есть три стола.

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
Repox 8 Май 2014 в 02:00

2 ответа

Лучший ответ

Ваша сводная таблица не соответствует соглашению об именах Laravel (которое в этой ситуации было бы tag_task), поэтому вам нужно указать имя таблицы в определении отношения следующим образом:

class Task extends \Eloquent {

    public function tags(){
        return $this->belongsToMany('Tag', 'task_tags');
    }
}

Имена внешних ключей допустимы, поэтому Eloquent знает их. Печать приводит к циклу foreach, как это было предложено @Razor.

0
Jarek Tkaczyk 8 Май 2014 в 10:32
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;
}

Для получения дополнительной информации см. отношения "многие ко многим".

3
Razor 7 Май 2014 в 22:20