按类别id laravel检索帖子

时间:2018-03-27 09:03:49

标签: php mysql laravel laravel-eloquent laravel-5.6

我想检索给定类别的所有帖子, 我正在开发api,在输入中我将收到类别名称,然后我想通过其在posts表中的id检索该类别,我想这样做,因为如果将来某些更改的类别名称我不必在我的更改码 我创造了这样的

PostController.php

  public function getPostsByCategory(Request $request)
{

    $posts=Posts::where('category',$request->category)->get();
    return response()->json(['posts'=>$posts]); 
}

发布模型

<?php

 namespace App;

 use Illuminate\Database\Eloquent\Model;

class Posts extends Model
{   

protected $fillable = [
    'post_title','post_description', 'category', 'user_id',
];

类别模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Posts_Category extends Model
{

}
你可以帮我解决这个问题吗,请建议我任何想法

5 个答案:

答案 0 :(得分:2)

我认为您正在寻找with渴望加载功能

您必须存储类别ID,而不是类别名称。

class Posts extends Model
{   
     protected $fillable = [
        'post_title','post_description', 'category_id', 'user_id',
     ];

     public function category()
     {
          return $this->belongsTo(Posts_Category::class, 'category_id', 'id');
     }
}

用作

$posts = Posts::where('category_id',$request->category)->with('category')->get();

如果您真的想按名称搜索

$posts = Posts::whereHas('category', function ($q) {
   $q->where('category_name', 'like', "%{$request->category}%");
})->get();

答案 1 :(得分:1)

您可以先按名称获取类别,然后按类别ID

过滤帖子
public function getPostsByCategory(Request $request)
{
    $category = Posts_Category::whereName($request->category)->firstOrFail();
    $posts=Posts::where('category',$category->id)->get();
    return response()->json(['posts'=>$posts]); 
}

答案 2 :(得分:1)

你从一开始就做错了。最佳做法是将posts_id存储在posts表中,当然这只是在帖子和类别表之间需要一对多关系的情况下。加上我不建议打破命名模型的惯例,除非你没有别的办法。我建议你更全面地阅读本节

  

https://laravel.com/docs/5.6/eloquent-relationships

答案 3 :(得分:1)

请为此提供一个解决方案,我想从我的laravel博客项目中的特定类别中获取所有最新帖子

这些是我的模特

Category model

    public function posts()
    {
        return $this->belongsToMany('App\Post')->withTimestamps();
    }


Post model

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

What's they next thing to do?
please help

答案 4 :(得分:0)

$ posts =帖子:: where('category_id',$ category-&gt; id) - &gt; get();