在Laravel中实现SQL子语句

时间:2018-06-08 17:36:51

标签: php laravel laravel-5 eloquent

我有一个数据库,其中每个订单都有一个对客户的引用,该客户引用了一个用户。每个订单都有一个客户,每个客户都有一个用户。现在我想访问属于用户的所有订单。在SQL中我会写:

SELECT * FROM orders WHERE customer_id IN (SELECT id from customers WHERE user_id = 1)

如何在不使用SQL的情况下在Laravel中访问它们。 谢谢!

3 个答案:

答案 0 :(得分:2)

DB::table('orders')
->whereIn('customer_id', function($query)
{
    $query->select('id')
          ->from('customers')
          ->where('user_id', 1);
})
->get();

答案 1 :(得分:0)

实现这种方式: 在您的用户模型中实施客户关系,如下所示:

public function customer {
   $this->belongsTo(Customer::class)->with('order'); // calling order relationship from customer model
 }

然后在您的客户模型中实现与订单模型的关系,如下所示:

public function order {
 $this->belongsTo(Order::class); 
}

然后你实现这样的查询:

 User::with('customer')->get();

答案 2 :(得分:0)

正如aynber所指出的,你应该使用modelsrelationships

class Order extends Model {}

class Customer extends Model {}

class User extends Model {
    public function orders() {
        return $this->hasManyThrough(Order::class, Customer::class);
    }
}

然后您可以获得这样的用户订单:

$orders = User::find(1)->orders;