Jasper Poppe Jasper Poppe - 5 months ago 30
PHP Question

Laravel get data from many to many relation

For a school project, I'm creating a website in the Laravel framework.
I can't work with the data from a many-to-many table in my controller.

Here are my models:

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');
}
}


I want to iterate all tags from my items in my controller:

//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');
}
}


What is wrong with my code? How can I handle the tags from my items?

FYI: I'm creating a search engine. If the user inserts an input value like "mana", all items with tag "management" should be shown.

Answer

Laravel's belongsToMany method queries related models and doesn't get them. That's because you might want to have some additional constraints in your query. What you need to do is:

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

Or simply:

$tags = $item->Tags;