我有一种情况,我正在建立一个 FTP 连接来收集数据,循环通过它注册新的或使用firstOrCreate
. 这是每 10 分钟在调度程序上运行一次,我使用 Laravel Horizon 来管理队列。
问题是,当我运行调度程序时,我发送了一份包含正确数据的查询和一份包含错误数据的查询(只有一封电子邮件)。
public static function zooplaLeads()
{
$all_files = Storage::disk('sftp')->files('outgoing');
foreach ($all_files as $key => $file_path) {
$file = Storage::disk('sftp')->get($file_path);
$parsed_file = simplexml_load_string($file);
$lead = $parsed_file->ZooplaLead;
if ($lead->TypeOfEnquiry == 'organise_viewing' || $lead->TypeOfEnquiry == 'request_property_details' || $lead->TypeOfEnquiry == 'looking_to_rent') {
$user = User::where('email', (string)$lead->FromEmail)->first();
$user_id = null;
if ($user) {
$user_id = $user->id;
};
$portal_enquiry = PortalEnquiry::firstOrCreate(
['listing_id' => (string)$lead->SourceListingId, 'email' => (string)$lead->FromEmail],
[
'listing_id' => (string)$lead->SourceListingId,
'email' => (string)$lead->from_address,
'name' => (string)$lead->FirstName . ' ' . (string)$lead->LastName,
'contact_number' => (string)$lead->Phone,
'portal' => 'Zoopla',
'user_id' => $user_id
]
);
Mail::to($portal_enquiry->email)->send(new NewPortalEnquiryTenant($portal_enquiry->load('listing.property')));
Storage::disk('sftp')->delete($file_path);
\Log::emergency('New Zoopla lead: ' . $portal_enquiry->id);
};
}
return count($all_files);
}
如果数据不正确但远非理想,我发现了一个使用急切加载和失败的小解决方法。
从下图中可以看出,创建了两个使用不同 ID 的作业。220 正确,29 错误。
当我记录正在循环的内容时,它只显示一项(220)。
我也无法使用命令重新创建错误,因此似乎(尽管未确认)仅在调度程序中发生。
有谁知道为什么会这样?