我有一个数据库,其中每个订单都有一个对客户的引用,该客户引用了一个用户。每个订单都有一个客户,每个客户都有一个用户。现在我想访问属于用户的所有订单。在SQL中我会写:
SELECT * FROM orders WHERE customer_id IN (SELECT id from customers WHERE user_id = 1)
如何在不使用SQL的情况下在Laravel中访问它们。 谢谢!
答案 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所指出的,你应该使用models和relationships。
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;