【问题标题】:How to return data with date range with Laravel 5.2?如何使用 Laravel 5.2 返回具有日期范围的数据?
【发布时间】:2017-10-13 09:57:29
【问题描述】:

所以我要做的是制作一份试算平衡报告。我必须在两个日期之间获取所有科目表(coas)及其借方总和和贷方总和。我在数据库中有这些表,这些是它们的属性

  1. 客户:ID、姓名
  2. Coas:身份证、姓名
  3. 期刊:id、描述、日期
  4. Journal_details:id、journal_id、coa_id、借方、贷方

我已经把他们的关系放到了模型中。

Client.php

public function coas()
{

    return $this->belongsToMany('App\Coa');
}

public function journal(){

    return $this->hasMany('App\Journal');
}

Coa.php

public function clients(){

    return $this->belongsToMany('App\Client');
}

public function journals_details(){

    return $this->hasMany('App\JournalDetails');
}

Journal.php

public function journal_details(){

    return $this->hasMany('App\JournalDetails');
}

public function client(){

    return $this->belongsTo('App\Client');
}

JournalDetails.php

public function journal(){

    return $this->belongsTo('App\Journal');
}


public function coa()
{
    return $this->belongsTo('App\Coa');
}

我正在尝试获取包含特定客户日记详细信息的所有 coas,我已经在这样做了。 $trials = $client->coas()->with('journals_details')->get();

但是,我使用日期范围仅选择属于输入的特定日期的那些。这是我的控制器。我试过了,但它不起作用。

public function trial_balance_generate(Request $request)
        {

            $client = Client::find($request->client_id);

            $start = \Carbon\Carbon::parse($request->from)->startOfDay();  

            $end = \Carbon\Carbon::parse($request->to)->endOfDay();

            $data= $client->coas()->with('journals_details')->whereBetween('date',[$start,$end])->get();

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

我知道我获取数据的方式有问题。我只是不知道如何使用包含日期的期刊标题获取所有 coas 及其详细信息。

这是我获取日期范围的 javascript。

$('.date').on('change', function() {
        var from = $('#from').val();
        var to = $('#to').val();
        var client_id = $('.clientHidden').val();
        $.ajax({
                type    : 'get',
                url     : '/user/'+client_id+'/reports/trialbalance/generate/',
                dataType: 'json',
                data    : {
                    'from':from,
                    'to':to,
                    client_id':client_id
                    },
                success:function(data){
                    $('td').remove();
                    for(var ctr = 0; ctr < data.length; ctr++)
                    {

                        $('#reportTbody').append()

                                '<tr><td>'+ data[ctr].name +'</td><td>{{$trial->journals_details->sum("debit")}}</td><td>{{$trial->journals_details->sum("credit")}}</td></tr>'+

                    }                
            }           
        });
});

这是我正在努力实现的目标https://imgur.com/a/IZvio 的照片,它返回了所有内容,所以还没有日期。

【问题讨论】:

  • 您不需要coas 表中的client_id 列以使Coa-&gt;belongsToMany 工作吗?
  • 还有一个名为 'client_coa' 的表,其中包含 client_id 和 coa_id。

标签: javascript laravel laravel-5.2 date-range accounting


【解决方案1】:

您模型上的date 是碳实例吗?否则他们没有可比性。

您可以在 $date 属性中将其设置为模型上的 Carbon 实例:

protected $dates = [
    'created_at',
    'updated_at',
    'date'
];

这样做,您将覆盖$dates,因此请务必包含created_atupdated_at(以及deleted_at,如果您使用的是软删除)。

Documentation link

【讨论】:

  • 哦,没错。已经尝试过了,但仍然没有返回正确的值。
【解决方案2】:

我认为您需要调试执行的 sql laravel 并确定它是否符合预期。 laravel 中获取执行的 sql 的方式是使用\DB::enableQueryLog():

在你的控制器方法中:

DB::enableQueryLog();
#your laravel query goes here
$laQuery = DB::getQueryLog();
#optionally disable the query log:
DB::disableQueryLog();

那么就可以打印之前执行的sql,看看是否符合预期!

【讨论】:

    猜你喜欢
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    相关资源
    最近更新 更多