在laravel 5.5中调用未定义的方法whereHas()

时间:2017-09-07 15:37:05

标签: laravel laravel-5 eloquent laravel-5.5

我正在升级并将我的网站重构为laravel 5.5,此代码现在给我一个问题。我在laravel github文档中搜索过,并没有找到任何可能影响这一点的重大变化。

我想要做的是在我的网站中相关部分,在每个食谱页面中,我想要显示更多具有相同类别的食谱。

这是我的代码:

    public static function getRelatedRecipes($recipe){

      $related_category_ids  = $recipe->category()->pluck('categories.id');

        return $relatedRecipes =
        Recipe::whereHas('categories', function ($q)use($related_category_ids){
        $q->whereIn('category_id', $related_category_ids);
        })
        ->where('id', '<>', $recipe->id)
        ->take(4)
        ->inRandomOrder()
        ->get();
}

这是食谱模型:

    <?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Recipe extends Model
{
    protected $guarded=[];

    /**
     * Get the route key name for Laravel.
     *
     * @return string
     */
    public function getRouteKeyName()
    {
        return 'slug';
    }



    public function category()
    {
        return $this->belongsToMany('App\Category');
    }

}

可能是什么问题?

谢谢,

P.S

如果您认为需要其他任何代码来解决此问题,请告诉我,我会在此处发布。 :)

1 个答案:

答案 0 :(得分:2)

首先请确保您在方法中使用的Recipe是模型,因此不是

Recipe::whereHas('categories', function ($q)use($related_category_ids){

使用

\App\Recipe::whereHas('categories', function ($q)use($related_category_ids){

另一件事就是这种categories关系。在模型中,您没有categories关系,您只有category关系