我是Laravel的新手并且遇到了疑问。我有ShopCustomer表,其中包含shop_id和customer_id。其中有shop_id和不同customer_id的多个条目。它有很多甚至很多的关系。
我有一个shop_id = 2.我想通过他们的名字找到客户='Mat'。我用JOIN子句尝试了我的代码。我希望将以下查询转换为Eloquent Query构建器,并希望使用Eager Loading。
$customers = \DB::table('shop_cust')
->join('customers', 'customers.customer_id', '=', 'shop_cust.customer_id')
->select('shop_cust.total_amount', 'customers.*')
->where('customers.name', 'LIKE', 'Mat')
->where('shop_cust.shop_id', '=', '2')
->get();
dd($customers);
这就是我的尝试。
$customers = ShopCust::with(['customer' => function ($query)
use ($customerName) {
$query->where('name', 'LIKE', '%' . $customerName . '%');
}])->where('shop_id','=', $shopId)->get();
答案 0 :(得分:1)
ShopCustomer模型
class ShopCustomer Eloquent {
public function customers()
{
return $this->hasMany('Customer','customer_id','customer_id');
}
public function shops()
{
return $this->hasMany('Shop','shop_id','shop_id');
}
}
客户模式
class Customer Eloquent {
public function customer_shop()
{
return $this->belongToMany('ShopCustomer','customer_id','customer_id');
}
}
商店模特
class Shop Eloquent {
public function shop_customer()
{
return $this->belongToMany('ShopCustomer','shop_id','shop_id');
}
}
您的查询
$customers = ShopCustomer::
->with(arra('customer' => function($q) use ($customerName){
$query->where('name', 'LIKE', '%' . $customerName . '%');
}))
->where('shop_id','=', $shopId)->get();
答案 1 :(得分:0)
您所描述的是商店和客户之间的多对多关系。您的shop_cust表只是关系的数据透视表。除非你有一些shop_cust的特殊功能,否则它不需要为它定义模型。
class Shop extends Model {
public function customers() {
return $this->belongToMany('Customer', 'shop_cust');
}
}
class Customer extends Model {
public function shops() {
return $this->belongToMany('Shop', 'shop_cust');
}
}
使用此定义,您的代码将如下所示:
$shop = Shop::find(2);
$customers = $shop->customers()->where('name', 'LIKE', 'Mat');
由于您只关注某个特定商店的客户,因此没有真正需要在此处加载。
如果您要访问的数据透视表上有额外的字段,您也可以这样做。首先,使用关系上的withPivot()
方法添加对额外字段的访问权限:
class Shop extends Model {
public function customers() {
return $this->belongToMany('Customer', 'shop_cust')->withPivot('foo', 'bar');
}
}
class Customer extends Model {
public function shops() {
return $this->belongToMany('Shop', 'shop_cust')->withPivot('foo', 'bar');
}
}
现在,您可以通过pivot模型属性访问数据:
foreach ($customers as $customer) {
echo $customer->pivot->foo;
echo $customer->pivot->bar;
}
使用数据透视表here的文档。