您能帮我将此SQL查询转换为Eloquent吗?
SELECT item.id, hired.item_id, hired.quantity - item.quantity as quanity
FROM items item
join hireds hired on hired.item_id = item.id
WHERE item.quantity > hired.quantity
order by item.id;
答案 0 :(得分:1)
您可以使用whereHas()。
Item::with('hireds')->whereHas('hireds',function($q){
$q->whereRaw('items.quantity>hireds.quantity');
})->get();
OR
Item::join('hireds','items.id','=','hireds.item_id')
->selectRaw('items.quantity - hireds.quantity as quantity')
->whereRaw('items.quantity>hireds.quantity')->get();
答案 1 :(得分:0)
可能看起来像
DB::table('items')
->join('hireds', 'items.id', '=', 'hireds.item_id')
->select('item_id', 'quantity')
->where('items.quantity', '>', 'hireds.quantity')
->get()->sortBy('id');
不能100%确定如何处理冲突的属性名称。
答案 2 :(得分:0)
您可以使用laravel中的raw创建查询:-
$query = DB::table('work_times as wt')
->join('work_time_details as wtd', 'wt.work_time_id','=','wtd.work_time_id')
->where('admin_id', $employee_id)
->whereBetween('work_time_date', [$start_date, $end_date])
->groupBy('wtd.project_id')
->orderBy('wtd.project_id')
->select(
DB::raw('sum(work_time_detail_hrs) as total_hour'),
'wtd.work_time_detail_id',
'wtd.project_id',
'wtd.work_type_id',
'work_types.work_type_name',
'p.project_name'
)
->get()
->toArray();
为此,您需要使用数据库类:
use Illuminate\Support\Facades\DB;
答案 3 :(得分:0)
假设您的模型是Item
和Hire
,请向Hire
模型添加以下关系。
public function item(){
return $this->belongsTo(Item::class);
}
在控制器中
$model = Hire::with('item')->get();
答案 4 :(得分:0)
感谢大家的帮助。我是通过以下方式实现的:
$hireds = Hired::query()->select('item.id', 'hired.item_id')
->selectRaw('hired.quantity - item.quantity as quanity')
->from('items as item')
->rightJoin('hireds as hired', 'hired.item_id', '=', 'item.id')
->whereRaw('item.quantity < hired.quantity')
->groupBy('bill_id')->select('bill_id')
->selectRaw('count(*) as items, sum(hired.price) as price')
->get();