Laravel从多对多的关系中获取数据

Jas*_*ppe 6 php pivot many-to-many 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');
    }
}
Run Code Online (Sandbox Code Playgroud)

我想迭代我控制器中项目的所有标签:

//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');
     }
}
Run Code Online (Sandbox Code Playgroud)

我的代码出了什么问题?如何处理我的物品中的标签?

仅供参考:我正在创建一个搜索引擎.如果用户插入类似"mana"的输入值,则应显示带有"management"标签的所有项目.

Rob*_*bok 11

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

$tags = $item->Tags()->get();
Run Code Online (Sandbox Code Playgroud)

或者干脆:

$tags = $item->Tags;
Run Code Online (Sandbox Code Playgroud)


luk*_*ter 6

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

$only4Tags = $item->Tags()->take(4)->get();
Run Code Online (Sandbox Code Playgroud)

如果你想要的结果你的关系,通话get()或简单,只需使用魔法属性:

$tags = $item->Tags()->get();
$tags = $item->Tags;
Run Code Online (Sandbox Code Playgroud)