2015-03-25 2 views
1

У меня есть следующая структура таблицы в моей базе данных.Laravel Category Model Relationships

Название таблицы: плитки

Столбцы: идентификатор, tile_name, tile_thumb, tile_snippet

Таблица Название: теги

Столбцы: идентификатор, tag_title

Название таблицы: tile_tags

Столбцов: идентификатор, tile_id, tag_id

Модели: плитки, Тэг, TileTag

В моем основном классе модели для записей я задающие следующее отношение к модели под названием TileTag, который представляет собой сводная таблица ,

<?php namespace Tiles; 

use Illuminate\Database\Eloquent\Model; 

class Tile extends Model { 

    protected $table = 'tiles'; 


    public function tags() { 

     return $this->belongsTo('Tiles\TileTag'); 

    } 
} 

Во время моего цикла Еогеаспа он возвращает tile_name и любые другие столбцы из моей таблицы, за исключением тех, которые присоединились к relatipnship.

@foreach($tiles as $tile)  
     <a href="tile/{{$tile->tile_name}}"> 
      <li class="col-md-4 mix" data-category="{{ $tile->tags->tag_title }}"> 
       {!! HTML::image($tile->tile_thumb, null, array('class' => 'img-responsive')) !!} 
      </li> 
     </a>     
@endforeach 

Как я могу получить свои категории/теги, связанные с моими основными данными, когда они сортируются во время каждого цикла?

Я пытаюсь вернуть данные во время цикла {{$ tile-> tags-> tag_title}}, но возвращает пустую строку.

Контроллер Метод:

класс TileController расширяет контроллер {

/** 
* Display a listing of tiles from the database. 
* 
* @return Response 
*/ 

public function index() { 

    // Get tile data from the model 
    $tiles = \Tiles\Tile::all(); 

    return view('pages.index', compact('tiles')); 

} 

возвращаемый массив: enter image description here

+2

Показать метод контроллера, который позаботится о передаче данных в представление. Вы можете использовать 'with()' Мне нужно, чтобы контроллер был уверен. – Kyslik

+0

@ Kyslik Привет!Я добавил метод контроллера к своему сообщению. Благодаря! –

ответ

2

Я думаю, что вы не должны создать модель для Tile_Tag , Laravel может обрабатывать отношения ManyToMany из коробки (я полагаю, что это тип отношений, потому что вы используете сводную таблицу). Ваши модели должны быть

class Tile extends Model { 

protected $table = 'tiles'; 


public function tags() { 

    return $this->belongsToMany('Tiles\Tag'); 
} 
} 

и

class Tag extends Model { 

protected $table = 'tags'; 


public function tiles() { 

    return $this->belongsToMany('Tiles\Tile'); 
} 
} 

Laravel будет знать, что у вас есть сводная таблица с именем "tag_tile" с колоннами "tag_id" и "tile_id". Проверьте соответствующую документацию here

Затем вы можете перебирать коллекцию тегов для каждой плитки, как это

@foreach ($tiles as $tile) 
     {!!$tile->tile_name!!} 
     @foreach ($tile->tag as $tag) 
      {!!$tag->tag_title!!} 
     @endforeach 
@endforeach 

Надеется, что это помогает.