Laravel eloquent: 将两个不同表的两列相乘

Laravel eloquent: Multiply two columns of two different tables

我的订单型号

class Order extends Model
{
    protected $fillable = [
        'id','user_id', 'erp_id', 'currency_code','ex_rate_with_base','order_status','status','created_at'
    ];

    protected $hidden = ['updated_at',];

    public function orderList(){
        return $this->hasMany(OrderList::class);
    }   

    public function currency(){
        return $this->belongsTo(Currency::class,'currency_code');
    }

}

我的货币模型

class Currency extends Model
{

    protected $fillable = [
        'currency_code','currency_name', 'currency_symbol', 'ex_rate_with_base', 'update_via', 'status',
    ];
    protected $hidden = [
        'created_at','updated_at','updated_by','created_by',
    ];

    protected $primaryKey = 'currency_code';

    public $incrementing = false;

    public function order()
    {
        return $this->hasMany(Order::class,'currency_code');
    }
}

我的订单列表模型

class OrderList extends Model
{
    protected $fillable = [
        'id','order_id', 'product_code', 'qty','unit_price','status',
    ];

    protected $hidden = [
       'created_at' ,'updated_at',
    ];

    public function order(){
        return $this->belongsTo(Order::class);
    }
}

在我的订单控制器中,我想 运行 查询:

$order_history_list = Order::where([['user_id', $user->id], ['updated_at','>', $updated_at]])
    ->with([
        'currency' => function ($query) {
            $query->select('currency_code','currency_symbol','ex_rate_with_base');
        },
        'orderList' => function ($query) {
            $query->select('id','order_id', 'product_code', '***order_lists.qty * orders.ex_rate_with_base AS unit_price_with_ex_rate***','status');
        }
    ])->get();

但是由于突出显示的部分出现了错误。 错误:'field list' 中的未知列 'order_lists.qty * orders.ex_rate_with_base' 请用正确的语法帮助我 如何在子查询中使用订单 table 列?

在您的 select 语句中使用 DB::raw 并向 'orderList' $query

添加一个连接
    $order_history_list = Order::where([['user_id', $user->id], ['updated_at','>', $updated_at]])
    ->with([
        'currency' => function ($query) {
            $query->select('currency_code','currency_symbol','ex_rate_with_base');
        },
        'orderList' => function ($query) {
            $query->select('id','order_id', 'product_code', DB::raw('order_lists.qty * orders.ex_rate_with_base AS unit_price_with_ex_rate'),'status')
                  ->join('orders','order_lists.order_id', 'orders.id');
        }
    ])->get();

我的最终查询有效:

$order_history_list = Order::where([['user_id',$user->id],['updated_at','>',$updated_at]])
                ->with(['currency'=>function($query){
           $query->select('currency_code','currency_symbol','ex_rate_with_base');
                },'orderList' => function($query){
                    $query->select('order_lists.id','order_lists.order_id', 'order_lists.product_code', 'order_lists.qty','order_lists.unit_price',DB::raw('he_order_lists.qty* he_orders.ex_rate_with_base AS unit_price_with_ex_rate'),'order_lists.status')->join('orders','order_lists.order_id', 'orders.id');
                }])->get();