Вызов неопределенного метода whereHas() в 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.

Если какой-либо другой код, который, по вашему мнению, необходим для решения этой проблемы, сообщите мне, и я опубликую его здесь. :)


person GabMic    schedule 07.09.2017    source источник
comment
Recipe скорее всего не то, что вы думаете.   -  person Ohgodwhy    schedule 07.09.2017
comment
@Ohgodwhy, рецепт именно такой, как я думаю, и когда я dd($recipe) получу полный рецепт.   -  person GabMic    schedule 07.09.2017
comment
Покажите нам свою Recipe модель.   -  person Marwelln    schedule 07.09.2017
comment
Отношения «многие ко многим» претерпели некоторые критические изменения. Также в чем проблема? Как в какой ошибке вы получаете?   -  person DevK    schedule 07.09.2017
comment
@ Эйтан, я не говорил, что $recipe не то, что ты думаешь. Я сказал, что Recipe не то, что ты думаешь. Каков путь к этому классу с полным пространством имен? Какие отношения внутри него /   -  person Ohgodwhy    schedule 07.09.2017
comment
@devk Ошибка Call to undefined method whereHas().   -  person GabMic    schedule 07.09.2017
comment
@Marwelln Я обновил вопрос с кодом.   -  person GabMic    schedule 07.09.2017


Ответы (1)


Прежде всего убедитесь, что Recipe, который вы используете в методе, является моделью, поэтому вместо

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

использовать

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

Другое дело, что это categories отношения. В модели у вас нет отношений categories, у вас есть только отношения category

person Marcin Nabiałek    schedule 07.09.2017
comment
Да, это всегда мелочи. я не рефакторинг хорошо. я должен был изменить, конечно, категории на категории. Работает как шарм, как и должно. - person GabMic; 07.09.2017