我收到了以下代码:
$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
字段。我怎么能接受它?
答案 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()