我有两个表'批准'和'续订',两个都有一个共同的列'applicant_id'。
当新的应用程序进入时,它会将数据记录存储在表'approval'以及已添加记录的'applicant_id'中。
现在,当同一申请人申请续订时,该行会在“续订”表格中创建,引用“applicant_id”
注意:对于'applicant_id',表''approval'中可以有一条记录,但在'renewal'表中可以有相同'applicant_id'的多条记录。
现在,我的要求是: 我需要从表中获取所有申请人的记录。
条件:如果表中的'applicant_id'数据和'renewal'表中有相同'applicant_id'的多行,那么我需要从'renewal'表中获取记录最新的一个。 如果“续订”表中没有数据但存在于“applicant_id”的“批准”表中,则获取记录应该获得“批准”表中的数据。 基本上,如果申请人在“续订”表中有记录,那么从那里获取最新的记录,如果只有“批准”表中有记录,那么得到那个但是偏好应该是从'续订'获得存在。
我试图在laravel 5.2中这样做。那么,有没有人可以帮助我呢?
答案 0 :(得分:0)
如果您使用的是Eloquent,那么您将拥有2个模型:
<?php
namespace App;
use Illuminate\Eloquent\Model;
class Renewal extends Model
{
protected $table = 'renewal';
public static function findMostRecentByApplicantId($applicantId)
{
$applicant = self::where('applicant_id', '=', $applicantId)
->orderBy('date_created', 'desc')
->first();
return $applicant;
}
}
<?php
namespace App;
use Illuminate\Eloquent\Model;
class Approval extends Model
{
protected $table = 'approval';
public static function findByApplicantId($applicantId)
{
$applicant = self::where('applicant_id', '=', $applicantId)
->first();
return $applicant;
}
}
然后,在要获取批准/续订记录的代码中,使用以下代码:
if (! $record = Renewal::findMostRecentByApplicantId($applicantId)) {
$record = Approval::findByApplicantId($applicantId);
}
//$record will now either contain a valid record (approval or renewal)
//or will be NULL if no record exists for the specified $applicantId
答案 1 :(得分:0)
经过几次尝试,我有一种方法可以使用raw:
SELECT applicant_id, applicant_name, applicant_email, applicant_phone, renewed, updated_at
FROM (
SELECT renewal_informations.applicant_id, renewal_informations.applicant_name, renewal_informations.applicant_email, renewal_informations.applicant_phone, renewal_informations.renewed, renewal_informations.updated_at
FROM renewal_informations
UNION ALL
SELECT approval_informations.applicant_id, approval_informations.applicant_name, approval_informations.applicant_email, approval_informations.applicant_phone, approval_informations.renewed, approval_informations.updated_at
FROM approval_informations
) result
GROUP BY applicant_id
ORDER BY applicant_id ASC, updated_at DESC;
答案 2 :(得分:0)
对于每个单独的审批ID,可以为续订表提供多个记录,表明您具有“一对多”关系。您可以在模型中定义
Approval.php(App \ Models \ Approval)
public function renewal()
{
return $this->hasMany('App\Models\Renewal', 'applicant_id')
}
定义了这种关系。您可以使用applicant_id从表中获取记录。
$renewal_request_records = Approval::find($applicant_id)->renewal();
这将从续订表中获取针对该applicant_id的所有记录。
查找最新的
$latest = Renewal::orderBy('desc', 'renewal_id')->first();
进一步阅读Eloquent Relations