Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 谷歌工作表到laravel_Php_Laravel_Google Sheets Api - Fatal编程技术网

Php 谷歌工作表到laravel

Php 谷歌工作表到laravel,php,laravel,google-sheets-api,Php,Laravel,Google Sheets Api,我建立了一个管理潜在客户的CRM 我有一个名为leads的表,在index()method中的控制器中,我向google API请求从我的工作表表中获取数据 现在发生的是,在每次页面刷新中,我都使用updateOrCreate()更新表 并使用dataTable()在leads index视图中显示它 我的问题是,正如我前面提到的,每个页面都会通过调用GoogleAPI的方法来刷新它, 这是一个性能问题,从长远来看,当它是上千条记录时,它会影响到我 我的问题是,如果进行了更改(编辑或添加行),是

我建立了一个管理潜在客户的CRM

我有一个名为leads的表,在
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,这给了你使用触发器的选项。自动检测工作表中的更改