我有以下表格
用户
id
name
公司
id
user_id
name
产品类别
id
company_id
name
产品
id
product_category_id
name
销售
id
product_id
price
quantity
total
现在我想获得指定用户产品的所有销售。我试过以下查询。但我不能在这里使用。它不适用于此过滤器。此外,我想通过其他几个字段过滤它,如users.user_name,products.product_name ... etc
$sales = Sale::with(['product'=>function($q) use ($user_id) {
$q->with(['product_category' => function($q) use ($user_id) {
$q->with(['company'=> function($q) use ($user_id) {
$sUserName = Input::get('sUserName');
$q->with(['user'=> function($q) use ($sUserName,$user_id) {
$q->where('id', $user_id);
}]);
}]);
}]);
}]);
在这些情况下是否可以使用Eloquent?或者我应该使用加入查询?请指教。感谢
答案 0 :(得分:0)
你可以像这样使用laravel eloqunt。
$ Sales = DB :: table(' Sales') - >加入('产品',' Sales.product_id',' =',' Products.id') - >加入(' ProductCategories',' ProductCategories.id',' =',' Products.product_category_id') - >加入('公司',' ProductCategories.company_id',' =',' companies.id') - >加入('用户',' companies.user_id',' =',' Users.id') - >选择('销售*'。) - >得到();
答案 1 :(得分:0)
在madalinivascu建议之后,我可以解决我的问题,如下所示。现在我可以通过订购用户,产品名称&日期。
$sUserName = Input::get('sUserName');
$sProductName = Input::get('sProductName');
$sFrom = Input::get('sFrom');
$sTo = Input::get('sTo');
$user_id = \Auth::User()->id;
// Show sales only for his products
$sales = Sale::with('sold_to_user')
->whereHas('sold_to_user', function($q) use ($sUserName) {
if(!empty($sUserName)) $q->where('name','LIKE', "$sUserName%");
})->with('product')
->whereHas('product', function($q) use ($sProductName) {
if(!empty($sProductName)) $q->where('name','LIKE', "$sProductName%");
});
if(\Auth::User()->privilege!='administrator') $sales = $sales->where('user_id','=',$user_id);
$sales = $sales->orderBy('updated_at','desc')->paginate(100);