我正在使用软件包maatwebsite/excel v2.1
将用户导入页面。
我已经上传了文件,但是我想先向用户显示他正在导入什么以及不能导入哪些行(因为缺少数据或用户已经存在),但是为此我想至少添加2个多余的字段,1会告诉我该行是否可以上传(出于审美目的),并且带有文字的顺序告诉他为什么不能将该行导入该行。
我得到这样的文件行
$users = Excel::load($ruta.'/'.$filename, function ($reader) {
})->get();
这将返回此集合,其中第一个值为用户分配了电子邮件test@subject.com
,第二个rif
字段的格式错误
[
{
"email": "test@subject.com",
"empresa": "bussines1",
"encargado": "person1",
"rif": "J-12345-1",
},
{
"email": "test@subject2.com",
"empresa": "bussines2",
"encargado": "Person 2",
"rif": "123456-2",
}
]
我想要的是添加这样的额外字段
[
{
"email": "test@subject.com",
"empresa": "bussines1",
"encargado": "person1",
"rif": "J-12345-1",
"validity": 0,
"reason": "Email is already used"
},
{
"email": "test@subject2.com",
"empresa": "bussines2",
"encargado": "Person 2",
"rif": "123456-2",
"validity": 0,
"reason": "the rif field is bad formated"
}
]
正如我所说,这些字段并不是要保存在文档中,而是用于向用户显示将要导入什么,不导入什么以及为什么不导入的图例。
我知道我可以在回调函数中检查所需的内容,但是如何将这些值插入到集合中?
答案 0 :(得分:1)
您可以使用for i, row in df.iterrows():
sql = "SELECT * FROM `Table_Name` WHERE `key` = '{}'".format(row.Key)
found = pd.read_sql(sql, con=Engine)
if len(found) == 0:
df.iloc[i:i+1].to_sql(name="Table_Name",if_exists='append',con = Engine)
方法来操作所有收集项。
map()
但是请注意,我们正在将阵列发回。当您尝试以迭代方式访问数据时(可能在您看来),您不能说$ user-> email,它将抛出$users = Excel::load($ruta.'/'.$filename, function ($reader) {
})->get();
$newUsers = $users->map(function($user){
return [
"email" => $user->email,
"empresa" => $user->empresa,
"encargado" => $user->encargado,
"rif" => $user->rif,
// make your controls and add new items here
"validity" => $validate,
"reason" => $reason
]
})
,所以您应该说Trying to get property of non-object
..