簡體   English   中英

Laravel Eloquent ORM 一對多關系,ZE0626222614BEE31951D84C64EE5 來自兩個表

[英]Laravel Eloquent ORM One-to-Many Relationship, Select from two Tables

我有兩個網上商店的 mySQL 表:

產品(cols:id等...)

圖片(列:id、 product_id 、文件路徑等...)

products-table 的任何產品都可能有無限數量的圖片

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

class Product extends Model
{
    public function pictures()
    {
        return $this->hasMany('App\Picture');
    }
}

我的圖片 model 看起來像這樣:

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)

備注:文件路徑是一列圖片。 我正在嘗試像這樣在刀片中訪問它:

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

我現在在這個小東西上工作了幾個小時——但我就是不明白我做錯了什么? 非常感謝任何幫助! 感謝你們!

你正在做的事情有兩個潛在的問題。

  1. 您正在使用{{$products->picture->filepath}}所以我假設您正在執行以下操作:

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

這里$productsProduct模型的集合。 該集合沒有picture屬性。

  1. 您正在遍歷產品,例如
@foreach($products as $product)
    {{$product->picture->filepath}}
@endforeach

除非每個產品都有圖片,否則這可能會導致您所說的錯誤。 如果產品沒有圖片,那么您將調用 null 上的文件路徑。 您可以通過多種方式解決此問題,我將在下面列出一種:

@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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM