Laravel 如何在查询生成器中创建此句子

Laravel 如何在查询生成器中创建此句子,laravel,eloquent,query-builder,Laravel,Eloquent,Query Builder,我有一个问题,我需要在query builder中执行此查询: 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

我有一个问题,我需要在query builder中执行此查询:

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_orders.id_address_delivery = 
ps_address.id_address
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 =54
$naviones=DB::connection('naviones')->table('ps_customer')
                ->join('ps_address','ps_customer.id_customer','=','ps_address.id_customer')
               ->join('ps_orders','ps_address.id_customer','=','ps_orders.id_customer')
                ->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')
                ->select('ps_orders.id_address_delivery','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')
                ->where('ps_orders.id_order','=',$idpedido)->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_orders.id_address_delivery = 
ps_address.id_address
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 =54
$naviones=DB::connection('naviones')->table('ps_customer')
                ->join('ps_address','ps_customer.id_customer','=','ps_address.id_customer')
               ->join('ps_orders','ps_address.id_customer','=','ps_orders.id_customer')
                ->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')
                ->select('ps_orders.id_address_delivery','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')
                ->where('ps_orders.id_order','=',$idpedido)->get();
我的问题是:我该如何处理这个查询部分

INNER JOIN ps_orders ON ps_address.id_customer =              
ps_orders.id_customer AND ps_orders.id_address_delivery = 
ps_address.id_address

我希望你能帮助我。谢谢。

您可以使用类似的方式加入

->join('table2 AS b', function($join){
        $join->on('a.field1', '=', 'b.field2')
        ->where('b.field3', '=', true)
        ->where('b.field4', '=', '1');
})
如果您不想进行比较,那么可以使用如下所示的多个链式函数

$query->join('ps_orders', function($join)
 {
   $join->on('ps_orders.id', '=', 'ps_address.id_customer')
        ->on('ps_orders.id_address_delivery', '=', 'ps_address.id_address')

 });

您可以在join函数中使用回调函数并传递两个相等条件。您好,您能举个例子吗?在文档中,我没有发现任何类似的问题。请检查我的答案是否可以帮助您。我想我已经解决了这个问题。我马上告诉你我是否能解决这个问题。这对其他人也有帮助。嗨,谢谢你回复我,这个方法对我没用,因为我需要比较我在这个查询中是如何做的:内部连接ps_orders ON ps_address.id_customer=ps_orders.id_customer和ps_orders.id_address\u delivery=ps_address.id_address.id_address在您告诉我的示例中的问题是,在需要子句的情况下,无法将一个域与其他域进行比较菲尔德嗨,是的,这是正确的答案,我在发布解决方案,但你在写解决方案。谢谢everybodyAlso非常重要,如果您使用函数$join,但需要与任何值进行比较并获得任何变量的此值,则可以使用保留方法将变量传递给函数$join,例如:函数$join使用$variable{};我需要将一个变量传递给函数$join,但我不知道怎么做。是的,我知道这就是为什么我在第一个答案中只与table.field值、1或true值进行比较。