使用引用表时,如何构建Laravel模型和资源



我仍然习惯了Laravel的概念,尤其是模型和资源。考虑到下面的内容,我很难理解如何在我的项目中以正确的Laravel方式实现这些概念。

我有以下表格作为例子:

applicants: {id, full_name, date_of_birth, applicant_type_id}
applciant_types: {id, applicant_type_name}

目前,我已经创建了一个申请人模型,并制作了一个申请者资源。

在我的申请者资源中,我运行一个原始SQL查询来存储申请者类型的集合,然后使用申请者记录的application_type_idapplient_types集合中获取applications_type_name

如何使用模型和资源的本机功能实现这一点?按照我目前的做法,如果我在一个表上有很多这样的引用,并且我试图查询资源的集合,这会影响性能吗?

谢谢

Laravel已经很好地记录了这些过程(https://laravel.com/docs/6.x/eloquent-relationships#the-保存方法(。但是,这里有一个总结。

假设您的模型名称为ApplicantApplicantType,则Applicant::class属于ApplicantType::class。因此,您可以在Applicant模型中设置这样的关系:

use AppApplicantType;
..
public function applicant_type()
{
return $this->belongsTo(ApplicantType::class);
}

而且,ApplicantType有许多申请人。ApplicantType模型中的关系为:

use AppApplicant;
..
public function applicants()
{
return $this->hasMany(Applicant::class);
}

当设置了这些关系后,您可以使用雄辩来保存和检索数据。例如,

$applicant = new Applicant(["full_name" => "John Doe", "date_of_birth"=>"1990-12-12"]);
$applicant_type = ApplicantType::create(["Type One"]); //make sure fillable array is set.
$applicant_type->applicants()->save($applicant);

这是一种方式。一定要通读文档。它会给你更多的信息。另外,请注意,不要使用timestamp(如果您正在使用(来存储出生日期。我有很多laravel新手这样做,并遇到无效的日期例外。时间戳将不允许您存储1970年之前的日期。因此,请改用DATE

希望这一回应能为你指明正确的方向。

由于检索记录的方法很多,我强烈建议您阅读此处的官方Laravel文档中的许多不同方法。

假设Applicant可以具有OneApplicant Type:

Applicant

public function type()
{
return $this->hasOne('AppApplicantType');
}

ApplicantType

public function applicant()
{
return $this->belongsTo('AppApplicant');
}

现在假设applicant_types表已经填充,并且applicants表已经填充了正确的applicant_type_id,您可以使用几种不同的方法使用Eloquent检索它们。

$applicantType = Applicant::find(1)->type;

上面将首先从id为1的applicants表中获取申请人,然后查看该申请人applicant_type_id,从applicant_types表中获取相应的申请人类型记录。

最新更新