首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我在laravel中得到"Non-static method App\Models\Category::products() not be static called“

为什么我在laravel中得到"Non-static method App\Models\Category::products() not be static called“
EN

Stack Overflow用户
提问于 2018-11-02 22:09:19
回答 3查看 1.2K关注 0票数 0

模型Category.php

代码语言:javascript
复制
public function products() {
    return $this->belongsToMany('App\Models\Product', 'category_product', 'category_id', 'product_id')->withTimestamps();
}

模型Product.php

代码语言:javascript
复制
public function categories() {
    return $this->belongsToMany('App\Models\Category', 'category_product', 'product_id', 'category_id')->withTimestamps();
}

HomeController.php

代码语言:javascript
复制
$category = Category::products()->find($id);
return view('site.category.details',[
    'details' => $category
]);

details.blade.php

代码语言:javascript
复制
@dd($details->pivot->name)
EN

回答 3

Stack Overflow用户

发布于 2018-11-02 22:20:50

当您定义belongsToMany关系时,它定义了给定类别的关系。但是通过调用Category::products()...,你还没有说出你想要哪个类别的产品。

在那里,您可以执行$category = Category::find($category_id)来获取类别,然后通过执行$category->products来检索该类别的产品。当然,您可以直接使用这样的产品:Category::find($category_id)->products

如果调用->products,就会得到产品的结果集合。如果您使用圆括号->products()调用它,那么您将得到DB query类,然后它允许您添加更多的查询方法,比如:->products()->where('id', $product_id)->get()

所以我在想,你可以把->find($id)放在->products()之后,而不是之前。

票数 2
EN

Stack Overflow用户

发布于 2018-11-02 22:29:10

如果你想把"products“加载到一个类别中,你可以顺便说一下:

代码语言:javascript
复制
$category = Category::with('products')->find($id);

或者用另一种方式:

代码语言:javascript
复制
$category = Category::find($id)->load('products');

您可以在herehere中看到这两种方法之间的区别。

票数 0
EN

Stack Overflow用户

发布于 2018-11-02 22:53:31

该警告是因为$this在静态方法调用中不可用,并且如果方法未声明为静态,则很可能有人会将$this语句添加到此方法中,而不需要在某个地方静态调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53120122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档