Laravel Eloquent ORM 一对多关系,从两个表中选择

我有两个网上商店的 mySQL 表:


产品(列:id 等)


图片(列:id、product_id、文件路径等...)


产品表中的任何产品都可能有无限数量的图片!


因此,我的产品模型如下所示:


class Product extends Model

{

    public function pictures()

    {

        return $this->hasMany('App\Picture');

    }

}

我的图片模型如下所示:


class Picture extends Model

{

    //

}

现在,我尝试列出所有产品及其相应的图片数据集。我尝试运行多个代码。但是,以下代码都不起作用:


\App\Product::pictures()->get()

不起作用!显示此错误:


Non-static method App\Product::pictures() should not be called statically

我还尝试了一些其他方法,例如


\App\Product::with('pictures')->get());

错误:


Trying to get property 'filepath' of non-object (View: /home/vagrant/testproject/resources/views/products.blade.php)

备注:Filepath是一列图片。我试图在刀片中访问它,如下所示:


{{$products->picture->filepath}}

我现在在这个小事情上工作了几个小时 - 但我只是不明白我做错了什么?非常感谢任何帮助!感谢你们!


至尊宝的传说
浏览 59回答 1
1回答

一只甜甜圈

您正在做的事情有两个潜在的问题。你正在使用{{$products->picture->filepath}},所以我假设你正在做类似的事情:$products = \App\Product::with('pictures')->get());这$products是模型的集合Product。该集合没有属性picture。您正在循环浏览类似的产品@foreach($products as $product)    {{$product->picture->filepath}}@endforeach除非每个产品都有图片,否则可能会导致您所说的错误。如果产品没有图片,那么您将在 null 上调用 filepath。您可以通过多种方式解决这个问题,我将在下面列出一种:@foreach($products as $product)    @if(!empty($product->picture))        {{$product->picture->filepath}}    @endif@endforeach正如OP在下面的评论中指出的那样,根本问题是这种关系有很多。所以要使用图片你应该这样做:@foreach($products as $product)    @foreach($product->pictures as $picture)        {{$picture->filepath}}    @endforeach@endforeach
打开App,查看更多内容
随时随地看视频慕课网APP