php - 使用回调函数/方法
问题描述
这是我试图实现的目标,但我无法以某种方式弄清楚如何可能链接和分散呼叫。
我有两个属性birthday
,hire_date
当值为空白时,当定义顶部的 while 循环时,它返回 TODAYS 日期。
while 循环中的以下插入定义回 0000-00-00 这正是我想要的,但我不希望在 Importer 类中定义birthday
和验证:hire_date
$obj = $this->parseLine(utf8_encode($lines[$index]));
$arr = $this->mapObject($obj);
$record = $this->getRecord($obj);
if ($record) {
if ($obj->updated_date > $record->updated_date || $mode === 'refresh') {
if (empty($obj->birthday)) {
$record->fill([
'birthday' => ''
]);
unset($arr['birthday']);
}
if (empty($obj->hire_date)) {
$record->fill([
'hire_date' => ''
]);
unset($arr['hire_date']);
}
$record->fill($arr);
} else {
$record->timestamps = false;
}
$record->deleted_at = null;
} else {
$record = $this->createRecord($arr);
}
$record->touched_at = $now;
$record->save();
我想要达到的目标:
无论如何我可以中断以下内容:
if (empty($obj->birthday)) {
$record->fill([
'birthday' => ''
]);
unset($arr['birthday']);
}
if (empty($obj->hire_date)) {
$record->fill([
'hire_date' => ''
]);
unset($arr['hire_date']);
}
$record->fill($arr);
并将我的解析器中的方法定义为:
return (object)[
'birthday' => ['function/method'],
];
所有帮助将不胜感激!
解决方案
Eloquent 模型中的 fill 方法接受数组作为唯一的参数。因此,mapObject 方法应该返回一个数组。您的问题的解决方案如下:
public function mapObject($obj)
{
return [
'birthday' => empty($obj->birthday) ?
'' :
Carbon::parse($obj->birthday)->format('Y-m-d'),
'hire_date' => empty($obj->hire_date) ?
'' :
Carbon::parse($obj->hire_date)->format('Y-m-d'),
];
}
然后,在 Importer 类中,您所要做的就是使用以下方法调用填充对象:
$record->fill($arr);
推荐阅读
- c# - 如何从 C# 中匹配的正则表达式计算文件名的结果
- set - iMacros 为 Mac Chrome 扩展设置 !DATASOURCE 错误
- jquery - 如何根据特定条件忽略 onclick 中的功能
- html - 需要帮助优化移动设备的 Bootstrap 网格,以便桌面视图在移动设备上是相同的
- java - 为什么网络请求返回的图片不能直接保存到文件中?
- android - 具有嵌套水平 RecyclerView 的 RecyclerView 中的 ItemTouchHelper - 无法滚动嵌套的 RecyclerView
- google-apps-script - 如何连接2个谷歌云sql表之间的关系
- javascript - 制作可变键和深度的嵌套对象的最佳方法是什么?
- html - 如何抓取特定的 HTML 标签?
- python - 将 nan 转换为 NaN 有多大用处?