[英]One to many relationship with multiple tables in using Eloquent ORM in Laravel
[英]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}}
我現在在這個小東西上工作了幾個小時——但我就是不明白我做錯了什么? 非常感謝任何幫助! 感謝你們!
你正在做的事情有兩個潛在的問題。
{{$products->picture->filepath}}
所以我假設您正在執行以下操作: $products = \App\Product::with('pictures')->get());
這里$products
是Product
模型的集合。 該集合沒有picture
屬性。
@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.