如何从laravel5.2中的两个不同表中获取记录

时间:2016-07-27 15:26:46

标签: mysql orm laravel-5.2

我有两个表'批准'和'续订',两个都有一个共同的列'applicant_id'。

当新的应用程序进入时,它会将数据记录存储在表'approval'以及已添加记录的'applicant_id'中。

现在,当同一申请人申请续订时,该行会在“续订”表格中创建,引用“applicant_id”

注意:对于'applicant_id',表''approval'中可以有一条记录,但在'renewal'表中可以有相同'applicant_id'的多条记录。

现在,我的要求是: 我需要从表中获取所有申请人的记录。

条件:如果表中的'applicant_id'数据和'renewal'表中有相同'applicant_id'的多行,那么我需要从'renewal'表中获取记录最新的一个。 如果“续订”表中没有数据但存在于“applicant_id”的“批准”表中,则获取记录应该获得“批准”表中的数据。 基本上,如果申请人在“续订”表中有记录,那么从那里获取最新的记录,如果只有“批准”表中有记录,那么得到那个但是偏好应该是从'续订'获得存在。

我试图在laravel 5.2中这样做。那么,有没有人可以帮助我呢?

3 个答案:

答案 0 :(得分:0)

如果您使用的是Eloquent,那么您将拥有2个模型:

Renewal.php

<?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;
    }
}

Approval.php

<?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