Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.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 如何仅检索子模型中的筛选记录?_Php_Laravel - Fatal编程技术网

Php 如何仅检索子模型中的筛选记录?

Php 如何仅检索子模型中的筛选记录?,php,laravel,Php,Laravel,我有一个表,我想用它来显示时间表日志的记录,我可以用whereHas进行筛选,但当我尝试按员工筛选时,我仍然会得到所有参与这些工作的员工的日志,而不是我正在搜索的员工的日志 我的控制器: $request=json\u decode(json\u encode($request->all(),true))->params; $jobs=Job::whereHas('timesheets',function($query)use($request){ 如果(计数($request->selecte

我有一个表,我想用它来显示时间表日志的记录,我可以用whereHas进行筛选,但当我尝试按员工筛选时,我仍然会得到所有参与这些工作的员工的日志,而不是我正在搜索的员工的日志

我的控制器:

$request=json\u decode(json\u encode($request->all(),true))->params;
$jobs=Job::whereHas('timesheets',function($query)use($request){
如果(计数($request->selected_employees)>0){
$query->where('employee\u id',$request->selected\u employees);
}
如果(计数($request->selected_clients)>0){
$query->where('client\u id',$request->selected\u clients);
}
如果(!空($request->start\u date)){
$query->where('date','>=',$request->start\u date);
}
如果(!空($request->end_date)){

$query->where('date','请发布
作业的内容
model@JonathanMartins张贴。
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Job extends Model

{
    use HasFactory;

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = ["client_id", "job_number", "job_date", "payment_type", "rate", "description"];

public $totalHoursArray = array();
/**
 * @var array|mixed
 */
private $report_totals;

public function client() {
    return $this->belongsTo(Client::class);
}

public function timesheets() {
    return $this->hasMany(TimesheetLog::class);
}


public function creator(){
    return $this->belongsTo(User::class,'created_by');
}

public function editor(){
    return $this->belongsTo(User::class,'edited_by');
}


/**
 *
 * Returns a count of Employee Hours per job for timesheet entries
 * currently selected in the Job model
 *
 * @return array
 */
public function getEmployeeHoursPerJob($employee_ids){

    $i = 0;
    $hours_per_job = array();
    $timesheets = empty($employee_ids) ? $this->timesheets : $this->timesheets->whereIn('employee_id',$employee_ids);

    foreach ( $timesheets as $trow) {
        $trow->employee_code = Employee::find($trow->employee_id)->code;
        $date = new \DateTime($trow->date);
        $trow->date = date_format($date, 'd-m-Y');

        //find if the employee exists in the hours per job array if not, push a new row
        $found = array_search($trow->employee_id,array_column($hours_per_job, 'employee_id', isset($hours_per_job['employee_id']) ? 'employee_id' : null));

        if($i > 0 && $found !== false){
            $hours_per_job[$found]['total_time'] += $trow->total_time;
        } else {
            array_push($hours_per_job, ['employee_id' => $trow->employee_id, 'employee_code' => $trow->employee_code, 'total_time' => ($trow->total_time)]);
        }

        $i++;
    }

    return $hours_per_job;
}

public function generateReport($jobs, Array $employee_ids){

    $report_totals = array();
    $filtered_timesheets = array();

    foreach ($jobs AS $jobrow) {
        $i = 0;

        $jobrow->client_name = Client::find($jobrow->client_id)->name;
        $jobrow->attention = Client::find($jobrow->client_id)->attention;
        $jobrow->rate = "$".$jobrow->rate ." ". $jobrow->payment_type;

        $dateT = new \DateTime($jobrow->job_date);
        $jobrow->job_date = date_format($dateT, 'd-m-Y');

        $hours = $jobrow->getEmployeeHoursPerJob($employee_ids);
        $jobrow->employee_hours = $hours;


        foreach ($filtered_timesheets as $timesheetf){
            array_push($timesheets_filtered, $timesheetf);
        }

        foreach($hours AS $hoursRow){

            $found = array_search($hoursRow['employee_id'],array_column($report_totals, 'employee_id',
                                        isset($report_totals['employee_id']) ? 'employee_id' : null));


            if($found !== false){
                $report_totals[$found]['total_time'] += $hoursRow['total_time'];
            } else {
                array_push($report_totals, $hoursRow);
                $i++;
            }
        }
    }
    return compact('jobs','report_totals');
}



}