我想检索给定类别的所有帖子, 我正在开发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
{
}
你可以帮我解决这个问题吗,请建议我任何想法
答案 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表中,当然这只是在帖子和类别表之间需要一对多关系的情况下。加上我不建议打破命名模型的惯例,除非你没有别的办法。我建议你更全面地阅读本节
答案 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();