Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有没有一种方法可以从Laravel中的一个急切加载的表中选择字段?_Php_Sql Server_Laravel - Fatal编程技术网

Php 有没有一种方法可以从Laravel中的一个急切加载的表中选择字段?

Php 有没有一种方法可以从Laravel中的一个急切加载的表中选择字段?,php,sql-server,laravel,Php,Sql Server,Laravel,下面我定义了两个关系表 父数据库: public function backorderQuantities(){ return $this->hasMany(BackorderQuantity::class, 'ITEMNMBR', 'ITEMNMBR')->where('SOPTYPE', 5); } 关系数据库: public function item(){ return $this->belongsTo(Item::class

下面我定义了两个关系表

父数据库:

public function backorderQuantities(){
        return $this->hasMany(BackorderQuantity::class, 'ITEMNMBR', 'ITEMNMBR')->where('SOPTYPE', 5);
    }
关系数据库:

 public function item(){
        return $this->belongsTo(Item::class, 'ITEMNMBR', 'ITEMNMBR');
    }
我这样称呼这种关系:

Item::has('backorderQuantities')
            ->select('ITEMNMBR',
                Item::raw("SUM(QTYONHND) as qty"),
                Item::raw("SUM(QTYONORD) as ordered"),
                Item::raw("SUM( ( CASE WHEN LOCNCODE LIKE 'IT-%' THEN QTYONHND END ) ) as transit"), 
            )
            ->where('PRIMVNDR', Auth::user()->vendor_id)
            ->groupBy('ITEMNMBR')
            ->orderBy($group['field'], $group['sort'])
        );
这很好,但我也需要从BackorderQuantilities中选择字段,以便可以按所述字段进行排序。换句话说,我想做这样的事情:

 Item::has('backorderQuantities')
            ->select('ITEMNMBR',
                Item::raw("SUM(QTYONHND) as qty"),
                Item::raw("SUM(QTYONORD) as ordered"),
                Item::raw("SUM( ( CASE WHEN LOCNCODE LIKE 'IT-%' THEN QTYONHND END ) ) as transit"),
                'backorderQuantities->QUANTITY'
            )
            ->where('PRIMVNDR', Auth::user()->vendor_id)
            ->groupBy('ITEMNMBR')
            ->orderBy('backorderQuantities->QUANTITY', $group['sort'])
但我犯了这样一个错误:

 Item::has('backorderQuantities')
            ->select('ITEMNMBR',
                Item::raw("SUM(QTYONHND) as qty"),
                Item::raw("SUM(QTYONORD) as ordered"),
                Item::raw("SUM( ( CASE WHEN LOCNCODE LIKE 'IT-%' THEN QTYONHND END ) ) as transit"),
                'backorderQuantities->QUANTITY'
            )
            ->where('PRIMVNDR', Auth::user()->vendor_id)
            ->groupBy('ITEMNMBR')
            ->orderBy('backorderQuantities->QUANTITY', $group['sort'])
SQLSTATE[42S22]:[Microsoft][SQL Server的ODBC驱动程序17][SQL Server]列名“BackOrderQuantilities”无效。SQL:从选择[ITEMNMBR]中选择count*作为聚合,从[IV00102]中选择Sumqtyond作为数量,从订购的Sumqtyonorder中选择Sumqtyonorder,当LOCNCODE为'IT-%'时选择SUM CASE,然后从传输结束,从[IV00102]中选择json_值[BackorderQuantilities],'$.QUANTITY',从[SOP10200]中选择*,其中[IV00102]。[ITEMNMBR]=[SOP10200]。[ITEMNMBR]=[SOPTYPE]=5和[PRIMVNDR]=YHI分组依据[ITEMNMBR]作为[aggregate_table]

可能是因为当时该表仍在加载。有没有办法做到这一点?任何帮助都将不胜感激

您将需要使用join而不是急于加载

类似的问题已经存在于Laracasts论坛上:

您可以使用以下选项选择eger加载的列:

不要忘记将BackOrderQuantilities表的forigen键传递给选定列

编辑:

要按子列排序,应使用join语句:

 Item::select('items.*')->leftJoin('items.ITEMNMBR','=','backorderQuantities.ITEMNMBR')->groupBy('backorderQuantities.ITEMNMBR')->orderBy('backorderQuantities.backorderQuantities')

我对SQL相当陌生/不太擅长,主要来自mongoDB背景。你能告诉我使用之前存在的带有join的查询时结构会是什么样子吗?我将关系表简化为backorder,并尝试了以下项::join'backorders',items.ITEMNMBR','=',backorders.ITEMNMBR',但我遇到了以下错误:SQLSTATE[42S02]:[Microsoft][SQL Server的ODBC驱动程序17][SQL Server]对象名称“backorders”无效。SQL:在[items].[ITEMNMBR]=[backorders].[ITEMNMBR]上选择count*作为[IV00102]内部联接[backorders]的聚合但是,如何在同一查询中使用该字段对orderby进行排序?您需要对BackOrderQuantity或Item table以及用于排序的哪一列进行排序?我需要能够根据BackOrderQuantity:QUANTITY以及上面列出的Item中的各个列进行排序。在这种情况下,您应该使用sql join..检查updateno骰子QLSTATE[42S02]:[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]无效的对象名称“items.ITEMNMBR”。SQL:从[IV00102]选择[items].*作为聚合从[IV00102]左侧加入[items].[ITEMNMBR]在[=]=[BackOrderQuantilities].[ITEMNMBR]根据[BackOrderQuantilities]分组。[ITEMNMBR]作为[聚合\u表]