比较laravel中的两个表以检查表中是否存在行

问题描述 投票:1回答:1

非常快,我有这个学校项目,我正在努力,但似乎有些问题。

我有:

表A - 收费标准:

id | feename | fee_level | fee_acad_year

表B - 付费:

id | fee_id | student_number | payment_status

所以我想要做的是,我想在费用表中循环收取所有费用,然后转到付费费用表,检查fee_id是否存在关于学生的号码以及付款状态仅在哪里1即支付。

如果存在fee_id,则应将其标记为已支付的付款并将其作为付费数据存储在数组中。

然后,如果它不存在,它应该将它们存储在另一个数组中,而不是付费的数组。

这是我的代码:

// Fetch All fees for that level, semester and acamedic year 
        $fees = DB::table('fee')
            ->where([
                ['fee.Department','=',$csl->departmentid],
                ['fee.Semester','=',$csl->semesterid],
                ['fee.StudentLevel','=',$csl->levelid]
            ])
            ->select('id')
            ->get();
    }

    //return $fees;

    $feeids = array();
    foreach($fees as $fee){
        $feeids[] = $fee->id;
    }
    //dd($feeids);

    // Select all from paid fees
    $paidFees = PaidFees::all();

    $paidFeeIds = array();
    foreach($paidFees as $pd) {
        $paidFeeIds[] = $pd->FeeId;
    }
    $status = "";
    if(in_array($feeids, $paidFeeIds)) {

        $status = "paod";
    }else {
        $status = "Not Paid";
    }

这是我困惑的部分。

php laravel laravel-eloquent
1个回答
1
投票

如果您需要一系列付费费用ID和一系列未付费费用ID,您可以使用Eloquent。

首先,定义一个关系:

public function paidFees()
{
    return $this->hasMany(PaidFees::class, 'fee_id');
}

然后获取ID:

$paidFeesIds = Fee::whereHas('paidFees', function($q) {
    $q->where('payment_status', 1);
})->pluck('id')->toArray();

$notPaidFeesIds = Fee::whereNotIn('id', $paidFeesIds)->pluck('id')->toArray();
© www.soinside.com 2019 - 2024. All rights reserved.