如何从此函数获取ID并将其与其他表匹配以获取Product_name(laravel)

时间:2019-01-30 03:41:40

标签: laravel

public function viewCustomerOrders(){
    $orders = Order::with('ordersz')->get();

    return view('admin.orders.view_customers_order')->with(compact('orders'));
}

我的公共功能代码

<?php
    namespace App;

    use Illuminate\Database\Eloquent\Model;

    class Order extends Model
    {
        public function ordersz(){
            return $this->hasMany('App\OrderProduct','order_id');
        }
        function product() {
            return $this->hasOne('App\Product');
        }
    }

我在订单模型上的关系

可以做到这一点吗?

foreach($orders->ordersz as $try){
    $getTheProductIDfromOrdersTabel= $try->product_id;
    matchItTomyProductTableTogetName= Product::where('id',$getTheProductIDfromOrdersTabel)->get();
}

因为我有订单表和order_products表,并且里面有order_id和product_id,所以我想从我的条件中获取product_id并将其与我的产品表匹配以显示其产品名称。

1 个答案:

答案 0 :(得分:0)

您所描述的是一种many-to-many关系。为了包括所有必需的数据,您将使用eager loading

考虑三个表-ordersproductsorder_product。各个模型的定义如下:

订购

class Order extends Model
{
    public function products()
    {
        return $this->belongsToMany(Product::class);
    }
}

产品

class Product extends Model
{
    public function orders()
    {
        return $this->belongsToMany(Order::class);
    }
}

数据透视表order_product-仅需要两列:order_idproduct_id

现在您的控制器方法可以更新为:

public function viewCustomerOrders()
{
    return view('admin.orders.view_customers_order')->with([
        'orders' => Order::with('products')->get()
    ]);
}

最后,要在视图文件中显示信息,请使用@foreach

@foreach($orders as $order)
    Order ID: {{ $order->id }}
    @foreach($order->products as $product)
        Product Name: {{ $product->name }}
    @endforeach
@endforeach