如何从滔滔不绝的查询中获取关系

时间:2018-02-27 09:55:20

标签: laravel eloquent

我收到了以下代码:

$popularProducts = PopularProduct::with('product')->get();

这就是我从popular_products(仅包含product_id)表中获取products表关系的所有产品的方法。但我有这个结果:

Collection {#409 ▼
  #items: array:1 [▼
    0 => PopularProduct {#411 ▼
      #connection: "mysql"
      #table: null
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:4 [▶]
      #original: array:4 [▶]
      #changes: []
      #casts: []
      #dates: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: array:1 [▼
        "product" => Product {#462 ▶}
      ]
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #fillable: []
      #guarded: array:1 [▶]
    }
  ]
}

我只需要relations->product字段。我怎么能接受它?

3 个答案:

答案 0 :(得分:2)

您需要遍历集合:

@foreach ($popularProducts as $popularProduct)
    {{ $popularproduct->product->id }}
@endforeach

如果您只想从集合中获取所有产品,请使用pluck()方法:

$products = $popularProducts->pluck('product');

<强>更新

在评论中,您已经说过要直接从DB获取links

Product::has('popularProduct')->pluck('links');

如果您在popularProduct模型中定义了Product关系,这将有效。

答案 1 :(得分:1)

您可以这样做

$products = PopularProduct::with('product')->get()->pluck('product');

如果您希望对结果进行键入,则可以这样

$products = PopularProduct::with('product')->get()->pluck('product','id');

// you can key it with **id** of the table (popularProduct) or by **id_product** of relationship (product)

如果您只想取消关系中的特定字段,则可以尝试类似的操作

 $products = PopularProduct::with('product:id,product_name')->get()->pluck('product','id');

答案 2 :(得分:0)

您可以使用whereHas方法(如果这些表之间存在关系)

$popular_products = Product::whereHas('products', function ($query) {
      $query->where('popular_products',$ids);
 })->get()