如何在方法而不是控制器中进行内部联接?

时间:2018-11-08 16:42:47

标签: laravel-5 eloquent

我有两个表的订单和产品。关系是一对一的。在订单类中,我创建了方法产品

public function product() {
        return $this->hasOne('App\Product', 'key_id', 'key_id');
    }

现在在控制器中,我想选择id不为null的行,这就是为什么我想使用InnerJoin

Order::where('order_id', 7)
    ->join('products', 'products.key_id', 'orders.key_id')
    ->get();

那很好,但我想得到

Order::where('order_id', 7)->get();

,所有联接都移至以下方法:

public function product() {
    return $this->hasOne('App\Product', 'key_id', 'key_id')
     ->join('products', 'products.key_id', 'orders.key_id')
}

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您已经定义了两个模型之间的关系,因此如果使用以下查询获取订单:

Order::where('order_id', 7)->with('product')->get();

从产品功能(即->join('products', 'products.key_id', 'orders.key_id')

中删除联接行)

完成此操作后,将$ order转储并终止,将有一个包含产品及其值的密钥对。