Php 谷歌工作表到laravel
我建立了一个管理潜在客户的CRM 我有一个名为leads的表,在Php 谷歌工作表到laravel,php,laravel,google-sheets-api,Php,Laravel,Google Sheets Api,我建立了一个管理潜在客户的CRM 我有一个名为leads的表,在index()method中的控制器中,我向google API请求从我的工作表表中获取数据 现在发生的是,在每次页面刷新中,我都使用updateOrCreate()更新表 并使用dataTable()在leads index视图中显示它 我的问题是,正如我前面提到的,每个页面都会通过调用GoogleAPI的方法来刷新它, 这是一个性能问题,从长远来看,当它是上千条记录时,它会影响到我 我的问题是,如果进行了更改(编辑或添加行),是
index()
method中的控制器中,我向google API请求从我的工作表表中获取数据 现在发生的是,在每次页面刷新中,我都使用
updateOrCreate()
更新表 并使用
dataTable()在leads index视图中显示它
我的问题是,正如我前面提到的,每个页面都会通过调用GoogleAPI的方法来刷新它,
这是一个性能问题,从长远来看,当它是上千条记录时,它会影响到我
我的问题是,如果进行了更改(编辑或添加行),是否有办法收听工作表
只有在这种情况下才更新
我曾想过对工作表数据做另一个表,但我需要以某种方式更新它
我需要关于如何以及是否可以这样做的指导方针,
或者有更好的方法
public function index(Request $request, Lead $lead)
{
$client = new Google_Client();
putenv('GOOGLE_APPLICATION_CREDENTIALS=../att-sheets-b5343f28dd39.json');
$client->useApplicationDefaultCredentials();
$client->addScope(Google_Service_Drive::DRIVE);
$driveService = new Google_Service_Drive($client);
// List Files
// $response = $driveService->files->listFiles();
// Set File ID and get the contents of your Google Sheet
$fileID = '1okqjGbGDnbzJbXDwZ1A6RHJ3LddyL6fGMZWnq88xUiw';
$response = $driveService->files->export($fileID, 'text/csv', array(
'alt' => 'media'));
$content = $response->getBody()->getContents();
// Create CSV from String
$csv = Reader::createFromString($content, 'r');
$csv->setHeaderOffset(0);
$records = $csv->getRecords();
// Create an Empty Array and Loop through the Records
$newarray = array();
foreach ($records as $value) {
$newarray[] = $value;
}
foreach ($newarray as $data) {
$matchThese = array('email' => $data['your-email']);
Lead::updateOrCreate($matchThese,[
'user_name' => 'admin',
'name' => $data['your-name'],
'tel' => $data['your-tel'],
'source' => 'Google sheets',
'sheet_date' => $data['date'].', '.$data['time'],
])->save();
}
$user = User::all();
if ($request->ajax()) {
$data = Lead::where('deleted', '!=' , '1')->orWhereNull('deleted')->latest()->get();
return Datatables::of($data)
->addIndexColumn()
->addColumn('action', function($lead){
$btnEdit = '';
$btnDel = '';
if(auth()->user()->can('update', $lead))
{
$btnEdit = '<a href="/leads/'.$lead->id.'/edit" class="btn btn-sm btn-primary edit" id="'.$lead->id.'"><i class="glyphicon glyphicon-edit"></i> Edit</a>';
}
if(auth()->user()->can('delete', $lead))
{
$btnDel = '<a href="#" class="btn btn-sm btn-danger delete" id="'.$lead->id.'"><i class="glyphicon glyphicon-remove"></i> Delete</a>';
}
$btnShow = '<a href="/leads/'.$lead->id.'" class="btn btn-sm btn-success show">View</a>';
$btn = $btnEdit . $btnDel . $btnShow;
return $btn;
})
->addColumn('checkbox', function($lead)
{
$checkbox = '';
if(auth()->user()->can('delete', $lead))
{
$checkbox = '<input type="checkbox" name="leads_checkbox[]" class="leads_checkbox" value="'.$lead->id.'">';
return $checkbox;
}
})
->rawColumns(['action','checkbox'])
->make(true);
}
return view('leads.index', compact(
['user', 'lead'])
);
}
公共功能索引(请求$Request,潜在客户$Lead)
{
$client=新的Google_客户端();
putenv('GOOGLE_APPLICATION_CREDENTIALS=../att-sheets-b5343f28dd39.json');
$client->useApplicationDefaultCredentials();
$client->addScope(谷歌服务驱动::驱动);
$driveService=新的Google\u服务\u驱动器($client);
//列出文件
//$response=$driveService->files->listFiles();
//设置文件ID并获取Google工作表的内容
$fileID='1okqjGbGDnbzJbXDwZ1A6RHJ3LddyL6fGMZWnq88xUiw';
$response=$driveService->files->export($fileID,'text/csv',数组(
“alt”=>“media”);
$content=$response->getBody()->getContents();
//从字符串创建CSV
$csv=Reader::createFromString($content,'r');
$csv->setHeaderOffset(0);
$records=$csv->getRecords();
//创建一个空数组并循环记录
$newarray=array();
foreach(记录为$value){
$newarray[]=$value;
}
foreach($newarray作为$data){
$matchthises=array('email'=>$data['your-email']);
Lead::updateOrCreate($MatchThis[
“用户名”=>“管理员”,
'name'=>$data['your-name'],
'tel'=>$data['your-tel'],
'source'=>'googlesheets',
'工作表日期'=>$data['date'].','.$data['time'],
])->save();
}
$user=user::all();
如果($request->ajax()){
$data=Lead::where('deleted','!=','1')->或wherenull('deleted')->latest()->get();
返回数据表::of($data)
->addIndexColumn()
->addColumn('action',函数($lead){
$btnEdit='';
$btnDel='';
if(auth()->user()->can('update',$lead))
{
$btnEdit='';
}
if(auth()->user()->can('delete',$lead))
{
$btnDel='';
}
$btnShow='';
$btn=$btnEdit.$btnDel.$btn显示;
返回$btn;
})
->addColumn('checkbox',函数($lead)
{
$checkbox='';
if(auth()->user()->can('delete',$lead))
{
$checkbox='';
返回$checkbox;
}
})
->rawColumns(['action','checkbox']))
->使(真实);
}
返回视图('leads.index',压缩(
['user','lead'])
);
}
谢谢你的帮助你可以通过创建LARAVER命令来实现这一点,并用Con来点击它。你能解释更多关于CRON吗?这是我第一次听到这个问题。请通过这个链接来定制命令,或者更好的例子,你可以使用Con来跟踪和运行命令。考虑使用Apple脚本代替PHP,这给了你使用触发器的选项。自动检测工作表中的更改