简体   繁体   中英

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.

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;

Calling the relationship function will return a relation object (in this case an instance of BelongsToMany ). You can use this to run add further components to your query before running it.
For example:

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

If you want the result of your relation, call get() or simpler, just use the magic property:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM