Laravel从多关系到多关系获取数据


Laravel get data from many to many relation

对于一个学校项目,我正在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');
     }
}

我的代码有什么问题?如何处理商品中的标签?

仅供参考:我正在创建一个搜索引擎。如果用户插入诸如"mana"之类的输入值,则应显示带有标记"管理"的所有项目。

Laravel的belongsToMany方法查询相关模型,但没有得到它们。这是因为您可能希望在查询中有一些其他约束。您需要做的是:

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

或者简单地说:

$tags = $item->Tags;

调用关系函数将返回一个关系对象(在本例中为 BelongsToMany 的实例)。您可以使用它来运行 在运行查询之前向查询添加更多组件。
例如:

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

如果你想要你的关系的结果,调用get()或更简单,只需使用 magic 属性:

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