【问题标题】:get all results by pivot table id, laravel通过数据透视表 id,laravel 获取所有结果
【发布时间】:2022-01-01 16:29:28
【问题描述】:

我有 laravel 多对多的关系

我想在控制器中获取所有带有类别 ID 的广告,例如 1

怎么了?如何通过数据透视表 categories_id = 1 获取所有模型?

    $category_details = Categories::where('slug','=', $category_slug)->first();

    $advertisements = Advertisement::with(['categories'=> function($query){
        $query->wherePivot('categories_id', $category_details->id);
    }])->get();

【问题讨论】:

    标签: laravel eloquent relationship


    【解决方案1】:

    您必须将 $category_details 变量传递给 Closure

    $advertisements = Advertisement::with(['categories'=> function($query) use($category_details) {
            $query->wherePivot('categories_id', $category_details->id);
        }])->get();
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    • 是的,使用添加的所需功能
    【解决方案2】:

    我认为将您的 Categories 模型重命名为 一个单数形式并为其添加类似的关系:

    class Category extends Model
    {
        public function advertisements()
        {
            return $this->belongsToMany(Advertisement::class);
        }
    }
    

    那么你可以简单地这样做:

    $category = Category::where('slug','=', $category_slug)->firstOrFail();
    
    return $category->advertisements()
        ->with('categories')
        ->get();
    

    或者你可以让它更漂亮一点:

    return Category::where('slug','=', $category_slug)
        ->firstOr(fn() => Category::make())
        ->advertisements()
        ->with('categories')
        ->get();
    
    

    【讨论】:

      猜你喜欢
      • 2021-09-10
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-21
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      相关资源
      最近更新 更多