为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
至尊宝的传说 2023-08-11 17:40:51
我有两个网上商店的 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}}我现在在这个小事情上工作了几个小时 - 但我只是不明白我做错了什么?非常感谢任何帮助!感谢你们!
查看完整描述

1 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

您正在做的事情有两个潜在的问题。

  1. 你正在使用{{$products->picture->filepath}},所以我假设你正在做类似的事情:

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

$products是模型的集合Product。该集合没有属性picture

  1. 您正在循环浏览类似的产品

@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


查看完整回答
反对 回复 2023-08-11
  • 1 回答
  • 0 关注
  • 56 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信