[英]Laravel get attribute with hasMany
我正在使用 Laravel 在線購物。 我制作了帶有記錄 user_id 和 product_id 的購物車,其中包含與產品的hasMany
關系。 我的問題是我無法獲得例如產品的名稱或價格,我只能獲得包含產品和購物車數據的整個數組。 有人可以告訴我如何得到它嗎? 也許查詢有問題,或者只是查看語法。
我的遷移:
public function up()
{
Schema::create('carts', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('product_id');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users');
$table->foreign('product_id')->references('id')->on('products');
});
這是我的控制器功能:
public function index(Request $request)
{
$query = Cart::with('product')->where('carts.user_id', $request->user()->id);
$query = $query->get();
return view('cart.index', ['cart' => $query]);
}
並查看以顯示購物車
@extends('app')
@section('content')
@foreach ($cart as $item)
<form method="" action="{{ route('destroycart', ['id' => $item->id]) }}">
{{ $item['product'] }}
<button class="btn btn-outline-dark">X</button>
</form>
@endforeach
@endsection
模型:
class Cart extends Model
{
use HasFactory;
public function product() {
return $this->hasMany(Product::class, 'id', 'product_id');
}
}
$item['product']
是否有另一種選擇來僅獲取產品數據?
忘記粘貼視圖返回的內容:
[{"id":10,"name":"lklkl","description":"klklkk","img":"przyklad.mo.jpg","price":50,"count":9,"created_at":"2022-05-24T13:13:03.000000Z","updated_at":"2022-05-24T13:13:03.000000Z"}]
我想獲得例如產品的名稱。
然后,您還應該訪問產品,因此:
@foreach ($cart as $item)
// Cart stuff here.
@foreach ($item->product as $prod)
// Product stuff here
@endforeach
@endforeach
如果您想一次只顯示一個購物車,您可以在控制器方法中獲取一個購物車
public function index(Request $request)
{
return view('cart.index', [
'cart' => Cart::with('product')
->where('user_id', $request->user()->id)
->latest()
->first()
]);
}
然后在您的視圖中,您可以遍歷購物車中的產品
@extends('app')
@section('content')
<form method="" action="{{ route('destroycart', ['id' => $cart->id]) }}">
@foreach ($cart->product as $product)
<p>{{ $product->name }}</p>
@endforeach
<button class="btn btn-outline-dark">X</button>
</form>
@endsection
或者,如果您想顯示當前登錄用戶的所有購物車,那么您可以這樣做
public function index(Request $request)
{
return view('cart.index', [
'carts' => Cart::with('product')
->where('user_id', $request->user()->id)
->latest()
->get()
]);
}
在視圖中循環購物車和每次迭代 - 循環產品
@extends('app')
@section('content')
@foreach($carts as $cart)
<form method="" action="{{ route('destroycart', ['id' => $cart->id]) }}">
@foreach ($cart->product as $product)
<p>{{ $product->name }}</p>
@endforeach
<button class="btn btn-outline-dark">X</button>
</form>
@endforeach
@endsection
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.