我有一个雄辩的模型Ledger与货币表有关,货币表与汇率有关。当我试图获得日期低于Ledger模型的汇率时,查询失败。这是我的代码。
Ledger::with('company')->with('order')->with(array('currency'=>function($query){
$query->with(array('exchangeRates'=>function($query1){
$query1->whereRaw('exchange_date < ledgers.date');
$query1->orderBy('exchange_date','desc');
$query1->first();
}));
}))->where('order_id','=',Input::get('order'))->get();
这是我的模特 分类帐模型
class Ledger extends \Eloquent {
protected $fillable = array(
'company_code','order_id','account','sub_account',
'date','document_number','document_desc','document_date',
'booking_type','amount','currency_code','amount_currency'
);
public function company(){
return $this->belongsTo('Company','company_code','company_code');
}
public function order(){
return $this->belongsTo('Order','order_id','id');
}
public function account(){
return $this->belongsTo('Account','sub_account','id');
}
public function currency(){
return $this->belongsTo('Currency','currency_code','id');
}
}
货币模型
class Currency extends \Eloquent {
protected $fillable = array('currency_shrt_name','currency_name',
'currency_country','currency_unit');
public function exchangeRates(){
return $this->hasMany('ExchangeRate','currency_code','id');
}
} 汇率模型
class ExchangeRate extends \Eloquent {
protected $fillable = array('exchange_date','currency_code','currency_value');
public function currency(){
return $this->belongsTo('Currency','currency_code','id');
}
}
答案 0 :(得分:0)
Fluent可能更适合这个查询,因为在Eloquent中加载关系会运行一个没有连接的单独选择。
此查询假定您的字段名称使用标准命名约定命名。
DB::table('ledgers')
->join('companies', 'ledgers.company_id', '=', 'companies.id')
->join('orders', 'ledgers.id', '=', 'orders.ledger_id')
->join('currencies', 'ledgers.id', '=', 'currencies.ledger_id')
->join('exchange_rates', function($join)
{
$join->on('currency.id', '=', 'exchange_rates.currency_id');
})
->where('exchange_rates.exchange_date', '<', 'ledgers.date')
->where('orders.id','=', Input::get('order'))
->order_by('exchange_rates.exchange_date', 'desc')
->select('field1', 'field2', 'field3')
->get();