Невозможно использовать объект типа Illuminate \ Database \ Query \ Builder в качестве массива - PullRequest
2 голосов
/ 22 января 2020

Я не могу найти ошибку здесь, как это исправить?

$db2 = DB::connection('sqlsrv')->table('Checkinout')
    ->join('Z_MemRecord','Checkinout.Userid','=','Z_MemRecord.uid')
    ->select(DB::raw("FORMAT(MAX (Checkinout.CheckTime), 'hh:mm tt') AS OffTime, FORMAT (min(Checkinout.CheckTime), 'hh:mm tt') AS Ontime, Checkinout.Userid,Z_MemRecord.Uname,FORMAT (Checkinout.CheckTime, 'MMM dd yyyy') as dates,FORMAT (Checkinout.CheckTime, 'dddd') as hour"))
    ->groupBy(DB::raw("Convert(Date, Checkinout.CheckTime),Checkinout.Userid,Z_MemRecord.Uname,FORMAT(Checkinout.CheckTime, 'MMM dd yyyy'),FORMAT (Checkinout.CheckTime, 'dddd')"));

$result = DB::connection('mysql')->table('netdoc')->insert(['Logid' => $db2['Checkinout.Userid'] ,'name'=> $db2['Z_MemRecord.Uname'],'dates' =>  $db2['dates'],'day'=>$db2['hour'],'Ontime' => $db2['Ontime'],'Offtime' => $db2['OffTime']]);


dd($db2);

1 Ответ

2 голосов
/ 22 января 2020

Метод groupBy() возвращает QueryBuilder для преобразования его в вызов массива get() для получения массива строк.

->groupBy(...)
->get();

Вам нужно иметь дело с запросом, возвращающим несколько строк так что быстрое решение для этого было бы пересечь db2 с foreach().

foreach ($db2 as $row) {
    $row = (array) $row;

    $result = DB::connection('mysql')
        ->table('netdoc')
        ->insert(['Logid' => $row['Checkinout.Userid'] ,'name'=> $row['Z_MemRecord.Uname'],'dates' =>  $row['dates'],'day'=>$row['hour'],'Ontime' => $row['Ontime'],'Offtime' => $row['OffTime']]);
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...