【发布时间】:2018-01-10 01:10:18
【问题描述】:
我在我的Laravel 5.4 应用程序中定义了Company 模型和Contact 模型,它们都有多对多的关系。因此,例如联系人模型有:
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() 方法,有人可以指导我在这个问题上可以做些什么或有什么方法可以克服这个问题。
谢谢
【问题讨论】:
-
你熟悉 Chris Fidao 的“Laravel Performant”系列吗?他有一个关于 Laravel 中的 Database Chuncking 的视频,它准确地解释了你想要实现的内容。它也是免费的。 serversforhackers.com/laravel-perf/database-chunking
标签: laravel eloquent laravel-5.4 laravel-eloquent