【问题标题】:Laravel get data from many to many relationLaravel 从多对多关系中获取数据
【发布时间】:2015-01-13 09:50:58
【问题描述】:

对于一个学校项目,我正在 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”这样的输入值,则应显示所有带有“management”标签的项目。

【问题讨论】:

    标签: php laravel many-to-many pivot


    【解决方案1】:

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

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

    或者简单地说:

    $tags = $item->Tags;
    

    【讨论】:

    • 以及如何获得喜欢的标签名称?
    • @mercury 它是一个集合,所以你需要循环它,或者映射它等等。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 对于特定的标签 ID(来自数组)你会怎么做?
    • @Pathros 那你还需要关系吗?如果您有 ID,您可以像 Tag::find([1, 2, 3]) 一样查询它们。
    • 谢谢。它帮助我发现我可以使用->whereHas(),然后使用->whereIn(),如图所示here
    猜你喜欢
    • 2019-05-23
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 2017-07-16
    • 2019-05-11
    相关资源
    最近更新 更多