Php 如何使用MySQL`joins`或Laravel`relationships`检索所需信息?
我正在使用Php 如何使用MySQL`joins`或Laravel`relationships`检索所需信息?,php,mysql,join,laravel-5.1,Php,Mysql,Join,Laravel 5.1,我正在使用Laravel框架进行一个项目。在本项目中,我有三个表: 1) 主零件号(主零件号) 列:id,零件号 数值:1,MS26778-042 2) 存货(存货) 列:id、主零件号、库存数量 数值:1,1,7 3) 库存最小值最大值(库存最小值最大值) 列:id、主零件号、最小数量 数值:1,1,10 我试图找到库存水平低于最低数量的存货。我一直在尝试使用连接,如下所示: $test = MasterPartNumber::table('master_part_numbers')
Laravel
框架进行一个项目。在本项目中,我有三个表:
1) 主零件号(主零件号) 列:id,零件号 数值:1,MS26778-042
2) 存货(存货) 列:id、主零件号、库存数量 数值:1,1,7
3) 库存最小值最大值(库存最小值最大值) 列:id、主零件号、最小数量 数值:1,1,10
我试图找到库存水平低于最低数量的存货。我一直在尝试使用
连接,如下所示:
$test = MasterPartNumber::table('master_part_numbers')
->join('inventory', 'master_part_numbers.id', '=', 'inventory.master_part_number_id')
->join('inventory_min_maxes', 'master_part_numbers.id', '=', 'inventory_min_maxes.master_part_number_id')
->select('master_part_numbers.part_number')
->where('inventory.stock_qty', '<=', 'inventory_min_maxes.min_qty')
->get();
编辑2:
在Laravel IRC的帮助下,我终于实现了它,但这并不理想,因为我错过了一些我想显示的数据,通常是通过关系收集的
以下是我目前正在使用的,但我希望得到重构:
DB::select(DB::raw('SELECT master_part_numbers.id, master_part_numbers.part_number, master_part_numbers.description, inventory.stock_qty, inventory.base_location_id, inventory_min_maxes.min_qty, inventory_min_maxes.max_qty
FROM master_part_numbers
JOIN inventory ON master_part_numbers.id = inventory.master_part_number_id
JOIN inventory_min_maxes ON master_part_numbers.id = inventory_min_maxes.master_part_number_id
WHERE inventory.stock_qty <= inventory_min_maxes.min_qty'));
DB::select(DB::raw('select master_part_number.id,master_part_number.part_number,master_part_number.description,inventory.stock_qty,inventory.base_location_id,inventory_min_maxes.min_qty,inventory_min_maxes.max_qty
来自主零件号
在master\u part\u number.id=inventory.master\u part\u number\u id上加入库存
在master\u part\u number.id=inventory\u min\u maxes.master\u part\u number\u id上加入inventory\u min\u maxes
其中inventory.stock\u qty如果我正确理解了您的问题,那么
“masters\u part\u number.id”==“inventory.id”和
“库存.主零件号”==“库存.主零件号”
$test = DB::table('master_part_numbers')
->join('inventory', 'master_part_numbers.id', '=', 'inventory.id')
->join('inventory_min_maxes', 'inventory.master_part_number', '=', 'inventory_min_maxes.master_part_number')
->where('inventory.stock_qty', '<=', 'inventory_min_maxes.min_qty')
->whereNotNull('inventory_min_maxes.master_part_number');
->select(DB::raw('part_number'))
->get();
$test=DB::table('master\u part\u number')
->联接('inventory'、'master\u part\u number.id'、'='、'inventory.id')
->联接('inventory\u min\u maxes'、'inventory.master\u part\u number'、'='、'inventory\u min\u maxes.master\u part\u number')
->其中('inventory.stock_qty',”我发现了一种解决这个问题的方法,使用Laravel
->whereRAW()语句:
$test = $inventory->join('inventory_min_maxes', 'inventory.id', '=', 'inventory.inventory_min_max_id')
->whereRaw('inventory.stock_qty <= inventory_min_maxes.min_qty')
->whereRaw('inventory.inventory_min_max_id = inventory_min_maxes.id') // required so it tests against the specific record, without it will test against all records.
->get();
$test=$inventory->join('inventory\u min\u max','inventory.id','=','inventory.inventory\u min\u max\u id'))
->whereRaw('inventory.stock\u quantity在表inventory\u min\u maxes
或inventory
中没有一列调用master\u part\u number
,因此我将它们切换到master\u part\u number\u id
。另外,由于DB::raw()的原因,我得到了一个strtolower错误
。当我删除该行时,我得到了与以前相同的结果,这是一个空集合。我得到的错误是:ErrorException in Grammar.php第58行:strtolower()期望参数1是字符串,给定的对象
$test = $inventory->join('inventory_min_maxes', 'inventory.id', '=', 'inventory.inventory_min_max_id')
->whereRaw('inventory.stock_qty <= inventory_min_maxes.min_qty')
->whereRaw('inventory.inventory_min_max_id = inventory_min_maxes.id') // required so it tests against the specific record, without it will test against all records.
->get();