Вызов функции-члена post () с нулевым отношением «многие ко многим» - PullRequest
1 голос
/ 11 марта 2020

Я создал две таблицы для хранения информации о записи:

Таблица сообщений, в которой хранится общая информация, кроме категорий.

Файл миграции каждой таблицы выглядит следующим образом:

posts

Schema::create('posts', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('title');
        $table->string('slug');
        $table->longText('excerpt');
        $table->longText('description');
        $table->tinyInteger('feature')->default(1);
        $table->enum('status',['publish','draft']);
        $table->string('image');
        $table->timestamps();
    });

post_categories

Schema::create('post_categories', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->unsignedBigInteger('category_id')->nullable();
        $table->unsignedBigInteger('post_id')->nullable();
        $table->foreign('category_id')->references('id')->on('categories');
        $table->foreign('post_id')->references('id')->on('posts');
        $table->timestamps();
    });

Теперь у меня есть следующая функция в модели PostCategory:

public function post(){
  return $this->belongsToMany(Post::class);
}

Теперь, когда я пытаюсь получить данные, используя следующее:

\App\Models\PostCategory::find(5)->post()->orderBy('created_at')->get();

Я получаю вызов функции-члена post ( ) на ноль

Что я должен сделать, чтобы получить сообщение с категорией 5?

Ответы [ 2 ]

2 голосов
/ 11 марта 2020

Вы неправильно поняли некоторые понятия.

Здесь ваши отношения находятся между публикацией и категориями .

В публикации Модель

public function categories(){
  return $this->belongsToMany(Category::class,'post_categories','post_id','category_id');
}

В модели Категория

public function posts(){
      return $this->belongsToMany(Post::class,'post_categories','category_id','post_id');
}

Теперь вы можете свободно получать сообщения из категорий и категорий из сообщений.

$post = Post::with('categories')->where('id',5)->first(); 

Таким образом, вы получите сообщение с его категориями.

$category= Category::with('posts')->where('id',5)->first();

Таким образом, вы получите категорию с его сообщениями.

Проверьте подробнее, как многие ко многим работа

Редактировать: -

Если с помощью публикации вы хотите создать условие в категориях, тогда.

$post = Post::with('categories')->whereHas('categories', function($q){
    $q->where('id',5);
})->get();
0 голосов
/ 11 марта 2020

пост Модель

public function categories(){
  return $this->belongsToMany(Post::class,'post_categories','category_id','post_id');
}

Категория модели

public function posts(){
      return $this->belongsToMany(Post::class,'post_categories','post_id','category_id');
}

Контроллер

$post = Post::with('categories')->where('id',5)->first(); 

print_r($post);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...