首页 > 解决方案 > 在多个表上构建查询

问题描述

我想使用 Eloquent 运行以下查询。

SELECT * FROM `orders`, `order_status` WHERE `orders`.`id` = `order_status`.`order_id` AND `orders`.`payment` > 0 AND `order_status`.`status_id` = 1

但是我对如何order_status.status_id = 1在 Eloquent 上应用最后一个条件 ( ) 感到困惑,因为它在另一个表上。我应该加入他们还是可以通过 Eloquent 关系应用它?

表的数据库架构:

订单:

Schema::create('orders', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps('');
            $table->integer('sender_id');
            $table->integer('sender_franchise');
            $table->integer('sender_agent')->nullable();
            $table->integer('recipient_franchise');
            $table->integer('recipient_agent')->nullable();
            $table->integer('category_id');
            $table->decimal('payment');
            $table->decimal('final_payment');
            $table->string('order_code');
            $table->decimal('extra_charge');
            $table->integer('recipient_id');
            $table->decimal('condition_charge')->nullable();
            $table->decimal('condition_amount')->nullable();
            $table->boolean('condition_charge_recipient')->nullable();
            $table->integer('quantity');
            $table->integer('created_by');
            $table->string('receiver_name')->nullable();
            $table->string('receiver_ph')->nullable();
            $table->text('shipping_address')->nullable();
});

订单状态:

Schema::create('order_status', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('order_id');
            $table->integer('status_id');
            $table->integer('created_by');
            $table->timestamps('');
});

标签: laraveleloquent

解决方案


你应该试试这个

Order::join('order_status', 'orders.id' = 'order_status.order_id')
    ->where('orders.payment', '>', 0)
    ->where('order_status.status_id', '=', '1');

推荐阅读