我仍然习惯了Laravel的概念,尤其是模型和资源。考虑到下面的内容,我很难理解如何在我的项目中以正确的Laravel方式实现这些概念。
我有以下表格作为例子:
applicants: {id, full_name, date_of_birth, applicant_type_id}
applciant_types: {id, applicant_type_name}
目前,我已经创建了一个申请人模型,并制作了一个申请者资源。
在我的申请者资源中,我运行一个原始SQL查询来存储申请者类型的集合,然后使用申请者记录的application_type_id从applient_types集合中获取applications_type_name。
如何使用模型和资源的本机功能实现这一点?按照我目前的做法,如果我在一个表上有很多这样的引用,并且我试图查询资源的集合,这会影响性能吗?
谢谢
假设您的模型名称为Applicant
和ApplicantType
,则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
可以具有One
Applicant 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
表中获取相应的申请人类型记录。