Laravel получает данные от многих ко многим

Для школьного проекта я создаю веб-сайт в рамках Laravel.
Я не могу работать с данными из таблицы «многие ко многим» в моем контроллере.

Вот мои модели:

class Item extends Eloquent {
public function Tags()
{
return $this->belongsToMany('Tag', 'items_has_tags', 'items_id', 'tags_id');
}
}

class Tag extends Eloquent {
public function LearningMaterials()
{
return $this->belongsToMany('LearningMaterial', 'learning_materials_has_tags', 'tags_id', 'learning_materials_id');
}
}

Я хочу повторить все теги из моих элементов в моем контроллере:

//get all items
$all = Item::where('public', '1')->get();

foreach($allLm as $item){
$tags = $item->Tags();

var_dump('will iterate');

foreach($tags as $t){
var_dump('will not iterate');
}
}

Что не так с моим кодом? Как я могу обработать теги из моих товаров?

К вашему сведению: я создаю поисковую систему. Если пользователь вводит вводимое значение, например «мана», все элементы с тегом «управление» должны отображаться.

4

Решение

Laravel-х belongsToMany метод запросы связанные модели и не получают их. Это потому, что вы можете захотеть иметь некоторые дополнительные ограничения в своем запросе. Что вам нужно сделать, это:

$tags = $item->Tags()->get();

Или просто:

$tags = $item->Tags;
10

Другие решения

Вызов функции отношения вернет объект отношения (в этом случае экземпляр BelongsToMany). Вы можете использовать это для запуска и добавления дополнительных компонентов в ваш запрос перед его выполнением.
Например:

$only4Tags = $item->Tags()->take(4)->get();

Если вы хотите результат вашего отношения, звоните get() или проще, просто используйте магическое свойство:

$tags = $item->Tags()->get();
$tags = $item->Tags;
6

По вопросам рекламы [email protected]