Laravel: извлекать данные из нескольких таблиц. - PullRequest
1 голос
/ 16 июня 2020

Я новичок в Laravel, но не думаю, что пишу оптимизированный код. Я хочу, чтобы все просроченные счета были разделены по клиентам. Таблица счетов-фактур и таблица клиентов. client_id находится в таблице счетов. У меня есть следующее ниже, но я хотел знать, есть ли лучший способ. Я также хотел бы получить имя клиента из таблицы клиентов. Я создал массив, поэтому я могу l oop пропустить соответствующий файл представления, но снова я не уверен, что это правильный способ?:

$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;

Ответы [ 2 ]

0 голосов
/ 16 июня 2020

да, к счастью, есть лучший способ, для которого термин называется 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. надеюсь, это поможет

0 голосов
/ 16 июня 2020

Попробовать

$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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...