根据类别调用帖子列表

时间:2016-12-24 16:50:27

标签: php laravel laravel-5 laravel-5.2

我试图根据类别调用列表操作系统,但它不起作用,给我错误:<StackLayout> <Label [text]="users?.Collection[0].BookingReferenceID"> </Label> </StackLayout> 。 我已经尝试过从双方打电话,扔了帖子模型的methdos或类别,但同样的错误信息。可以搞清楚我做错了什么。

数据库:

Non-static method App\Category::posts() should not be called statically, assuming $this from incompatible context

控制器:

Posts:
-id;
-title;
-text;

Categories:
-id;
-name;
-internal_name;

category_post:
-id;
-post_id;
-category_id

模特职位:

public function categoryPostList($category)
{
     $category = Category::posts()->where('internal_name',$category)->first(); 
     $posts = Post::categories()->where('category_id',$category->id)->get(); 
     dd($posts)
}

模特类别:

class Post extends Model
{
    public function categories()
    {
        return $this->belongsToMany(Category::class);
    }       
}

2 个答案:

答案 0 :(得分:1)

首先,如果关系是多对多(您使用数据透视表),那么您的关系应该是belongsToMany(),而不是belongsTo()

加载关系您应该使用with()方法。例如,如果您要加载一个包含所有帖子的类别:

Post::where('category_id', $category->id)->with('categories')->first();

答案 1 :(得分:0)

您可以将whereHas用作:

$category = Category::where('internal_name',$category)->first();

$posts = Post::whereHas('categories', function($q) use($category) {
    $q->where('category_id',$category->id);
})->get();

或者

$category = Category::where('internal_name',$category)->first();
$posts = $category->posts;
  

whereHas方法用于放置&#34;其中&#34;你的条件   查询。