【问题标题】:How can I use parent relation attribute in sub query in laravel eloquent如何在 laravel eloquent 的子查询中使用父关系属性
【发布时间】:2017-12-11 12:40:57
【问题描述】:
$order_detail = 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', 'qty',
                DB::raw('(unit_price*orders.ex_rate_with_base) as unit_price_new'), 'status');
        },
    ])->get();

请帮忙,

如何在子查询中使用订单表中的属性ex_rate_with_base。 我不想使用DB 查询。请用雄辩的方式解决。

【问题讨论】:

  • 这真的适用于DB吗?

标签: laravel laravel-5 eloquent


【解决方案1】:

我会这样做的?

数据库结构:

ModelCurrency.php

class ModelCurrency extends Model
{
    public $timestamps = true;
    protected $table = 'currency';
    protected $guarded = [];
}

ModelOrderList.php

class ModelOrderList extends Model{
    public $timestamps = true;
    protected $table = 'order_list';
    protected $guarded = [];
}

ModelOrderDetail.php

class ModelOrderDetail extends Model{
    public $timestamps = true;
    protected $table = 'order_detail';
    protected $guarded = [];


    public function scopeOfUser($query, $user_id){
        return $query->where('user_id', $user_id);
    }

    public function scopeUpdatedAfter($query, $updated_at){
        return $query->where('updated_at', '>', $updated_at);
    }


    public function currency(){
        return $this->hasOne(ModelCurrency::class, 'id', 'currency_id');
    }

    public function order_lists(){
        return $this->hasMany(ModelOrderList::class, 'order_id', 'id');
    }
} 

控制器中的功能:

//imports
use App\ModelOrderDetail;
use Illuminate\Support\Carbon;

public function prices() {
    $user_id = 1;
    $updated_at = Carbon::yesterday();

    $data = ModelOrderDetail::with('currency', 'order_lists')->ofUser($user_id)->updatedAfter($updated_at)->get();

    foreach ($data as $d){
        $base_rate = $d->currency->base_rate;
        foreach($d->order_lists as $o) $o->new_unit_price = $base_rate * $o->unit_price;
    }

    return response()->json($data);
};

编辑 - 输出:https://pastebin.com/i53PytSk

【讨论】:

  • 你能分享一下你用来创建如此漂亮的数据库结构图像的工具吗?
猜你喜欢
  • 2020-01-29
  • 2022-01-05
  • 1970-01-01
  • 2013-10-03
  • 2017-07-19
  • 2019-02-15
  • 2017-10-24
  • 2020-11-02
  • 1970-01-01
相关资源
最近更新 更多