Laravel: 从多个表格中提取数据

问题描述 投票:0回答:1

我是Laravel的新手, 但我不认为我写的是优化的代码. 我想把所有逾期的发票按客户分开. 发票表和客户表. client_id在发票表里. 我有下面的,但我想知道是否有更好的方法。我还想从客户表中抓取客户名称。我已经创建了一个数组,这样我就可以在视图文件中相应的循环,但同样我不确定这是正确的方法?

$overdueClients = Invoice::where("date_paid",'0000-00-00')->where("date_due","<=",date("Y-m-d"))->pluck('client_id');
foreach($overdueClients as $overdueClient)
{
    $invoices = Invoice::select("title","total","on_account","date","date_due")->where("date_paid",'0000-00-00')->where("date_due","<=",date("Y-m-d"))->where('client_id',$overdueClient)->get();
    $return[$overdueClient][] = $invoices;
}
return $return;
laravel
1个回答
0
投票

试试这个

$return = Invoice::select("title","total","on_account","date","date_due","client_id")->where("date_paid",'0000-00-00')->where("date_due","<=",date("Y-m-d"))->get();

return $return;

0
投票

是的,幸运的是,有一个更好的方法,哪个术语叫 "更好的方法"?relations 并可以使用急切加载,所以你可以做的是使关系是模型第一:所以在你的。Invoice 你写的东西像下面。

public function users(){
    return $this->belongsTo('App/Users');
}

你应该根据你的模型和用户模型的名称和路径来固定上述关系。

public function invoices(){
    return $this->hasmany('App/Invoices');
}

所以现在一张发票属于一个用户和一个 user 可以有许多发票.当你需要得到用户有发票和逾期的发票,你做像下面。

$users = Invoices::with('users')->where("date_paid",'0000-00-00')->where("date_due","<=",date("Y-m-d"));

这是更好的方式来行动,因为防止n+1问题,这种方式,你只加载用户,如果他们有逾期的发票,如果没有,他们没有被加载在所有看看下面的文档。

https://laravel.com/docs/7.x/eloquent-relationships#introduction

我强烈建议你花时间阅读并实践它,因为当你想使用laravel时,你会比你想象的更需要它.希望这能帮助到你.

© www.soinside.com 2019 - 2024. All rights reserved.