У меня есть модель Company
и модель Contact
, определенные в моем приложении Laravel 5.4
, и обе они имеют отношения "многие ко многим". Так, например, модель контактов имеет:
public function company()
{
return $this
->belongsToMany('App\Company', 'company_contact','contact_id', 'company_id')->withTimestamps();
}
Теперь у меня есть набор данных, в котором я хочу получить все данные контактов и информацию о компании, поэтому я использовал:
public function getData()
{
$contacts = Contact::all();
foreach($contacts as $contact)
{
$getCompany = $contact->company()->withPivot('created_at')->orderBy('pivot_created_at', 'desc')->first();
$getCompany->contacts = Company::find($getCompany->id)->contacts;
$contact->company = $getCompany;
$contact->companies_interested = json_decode($contact->companies_interested);
$companies = [];
if($contact->companies_interested)
{
foreach($contact->companies_interested as $companiesInterested)
{
$getCompany = Company::withTrashed()->find($companiesInterested);
$companies[] = array(
'value' => $getCompany->id,
'label' => $getCompany->name
);
}
$contact->companies_interested = json_encode($companies);
}
}
return response()->json([
'model' => $contacts
], 200);
}
Это отлично работает для небольшого набора данных, но при использовании большого количества данных происходит сбой (около 10 000 полей), я думаю, php memory fails
загружать, когда речь идет о большом наборе данных. Я просматривал документы Laravel
, чтобы найти решение, и узнал о методах chunk()
и cursor()
. Может ли кто-нибудь подсказать мне, что можно сделать в этой проблеме или какой подход можно преодолеть.
Спасибо