【问题标题】:Query eloquent in Laravel 5.8在 Laravel 5.8 中查询 eloquent
【发布时间】:2020-01-31 12:41:39
【问题描述】:

我在 Laravel 5.8 中使用 Eloquent 进行查询时遇到问题,我真的不知道会发生什么。

我会解释:

我的 Eloquent 查询是这样的:

$naviones=DB::connection('naviones')->table('ps_customer')
            ->select('ps_orders.id_order','ps_customer.firstname','ps_customer.lastname','ps_customer.email','ps_address.address1',
                'ps_address.postcode','ps_address.city','ps_address.phone_mobile','ps_orders.id_order','ps_orders.reference',
                'ps_order_detail.product_name','ps_order_detail.product_quantity','ps_shop.name as tienda','ps_carrier.name as transportista')
            ->join('ps_address','ps_customer.id_customer','=','ps_address.id_customer')
            ->join('ps_orders', function($join){
                $join->on('ps_address.id_customer','=','ps_orders.id_customer')
                    ->where('ps_address.id_address','=','ps_orders.id_address_delivery');
            })
            ->join('ps_order_detail','ps_orders.id_order','=','ps_order_detail.id_order')
            ->join('ps_shop','ps_order_detail.id_shop','=','ps_shop.id_shop')
            ->join('ps_carrier','ps_orders.id_carrier','=','ps_carrier.id_carrier')
            ->where('ps_orders.id_order','=',11389)
            ->get();

如您所见,我正在对数据库进行此查询,该数据库不一定是应用程序使用的数据库。这个雄辩的查询翻译成这样:

SELECT
`ps_orders`.`id_order`, 
`ps_customer`.`firstname`,
`ps_customer`.`lastname`,
`ps_customer`.`email`,
`ps_address`.`address1`,
`ps_address`.`postcode`,
`ps_address`.`city`,
`ps_address`.`phone_mobile`,
`ps_orders`.`id_order`,
`ps_orders`.`reference`,
`ps_order_detail`.`product_name`,
`ps_order_detail`.`product_quantity`,
`ps_shop`.`name` AS `tienda`,
`ps_carrier`.`name` AS `transportista`
 FROM
`ps_customer`
 INNER JOIN `ps_address` ON `ps_customer`.`id_customer` = 
 `ps_address`.`id_customer`
 INNER JOIN `ps_orders` ON `ps_address`.`id_customer` = 
 `ps_orders`.`id_customer`
 AND `ps_address`.`id_address` = ps_orders.id_address_delivery
 INNER JOIN `ps_order_detail` ON `ps_orders`.`id_order` = 
`ps_order_detail`.`id_order`
 INNER JOIN `ps_shop` ON `ps_order_detail`.`id_shop` = 
`ps_shop`.`id_shop`
 INNER JOIN `ps_carrier` ON `ps_orders`.`id_carrier` = 
`ps_carrier`.`id_carrier`
 WHERE
`ps_orders`.`id_order` = 11389

嗯,重点是,如果我在 Mysql 中执行该查询并执行它,它会为我提供我需要的信息,但是,在 eloquent 集合中,它是空的。这就是让我发疯的原因,该系列是空的。该查询是通过 eloquent 传递给我的,我如何确保它是由 eloquent 传递的?我故意在其中一个字段中生成错误,让 Laravel 通知我并向我展示完整的查询以检查它,这就是查询:

在红色圆圈的末尾,我显示了故意创建的错误,以查看完整的查询并查看它是否准备就绪。

我不明白发生了什么,我不知道该怎么办,我有两天时间,我不知道发生了什么。

希望你能给我一些建议,谢谢。

【问题讨论】:

  • 首先你没有使用雄辩。您已经使用了查询生成器。
  • 如何检查集合是否为空? (不使用 Eloquent,那是查询生成器)
  • 我要做的是逐行删除所有连接 - 而不是试图一次解决所有问题,找出问题所在;这是在哪一行返回一个空集合?然后我们就可以从那里开始工作了。
  • 注意:如果您想查看/调试生成的查询,可以将->get() 替换为->toSql() 然后dd($naviones),无需故意生成错误。
  • 是的,你说得对,是查询生成器,集合是空的,因为当我执行 dd($naviones) 时,我可以看到数组是空的。

标签: php laravel eloquent orm


【解决方案1】:

如果你删除它:

->join('ps_orders', function($join){
            $join->on('ps_address.id_customer','=','ps_orders.id_customer')
                ->where('ps_address.id_address','=','ps_orders.id_address_delivery');
        })

有结果吗?可能是这个函数的问题。

另外,你能改变这个吗:

DB::connection('naviones')->table('ps_customer')

到

DB::table('ps_customer')

【讨论】:

  • 我需要指定连接,因为信息在其他 BD 中,不是应用程序的主要 BD。
  • 该函数是否存在此查询:INNER JOIN ps_orders ON ps_address.id_customer = ps_orders.id_customer AND ps_address.id_address = ps_orders.id_address_delivery。我想说的是,这个函数添加连接器AND,是否存在其他方式来添加这个连接器进行查询?
  • 你能从最后一行删除 '=' ->where('ps_orders.id_order','=',11389) ,这可能是问题
  • 也来自这一行 ->where('ps_address.id_address','=','ps_orders.id_address_deli
  • 我删除了'=',问题还是一样
猜你喜欢
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 2015-02-22
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多