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();