我有一个场景,我想提供给定表的字段列表(以及单行的ID)并返回数据。但我希望任何一个查找的字段也能自动获取查找数据。
我已经为查找字段建立了关系,但希望我的代码能够自动查找在每个字段上建立的任何关系。
这可能吗?
-
例如,我有一个'jobs'表,其中包含一些查找字段到其他表:
id
description
job_type_id
repro_status_id
job_status_id
customer_id
supplier_id
...
然后我将我的模型用于'工作',并使用Laravel的惯例来创建关系:
class Job extends BaseModel {
public function jobStatus (){
return $this->belongsTo('JobStatus', 'job_status_id');
}
public function jobType (){
return $this->belongsTo('JobType', 'job_type_id');
}
public function customer (){
return $this->belongsTo('Customer', 'customer_id');
}
// etc...
}
因此,建立这些关系后,能够根据fieldname获取关系会很有帮助。有点像...
// Made up code
Job::getRelationshipByFieldname('job_type_id'); // Returns the jobType method
我想要这样做的原因是:我正在为'jobs'表构建一个表单字段列表,但需要捕获任何字段上的任何关系。
答案 0 :(得分:0)
开箱即用,Laravel中没有这样的东西,但是如果你的列遵循一些模式和/或Laravel的命名约定,你可以在你的基础模型上创建一个方法:
class BaseModel extends Eloquent {
public function getRelationshipByFieldname($field)
{
// Converts job_status_id into jobStatus
$method = camel_case(substr($field, 0, strlen($field) - 3));
return call_user_func(static::class . '::' . $method);
}
}
如果你不能坚持一个约定,你总是可以在你的基础模型中映射方法:
class BaseModel extends Eloquent {
private $relationMethods = [
'job_status_id' => 'jobStatus',
'job_type_id' => 'jobType',
'customer_id' => 'customer',
];
public function getRelationshipByFieldname($field)
{
$method = camel_case($this->relationMethods[$field]);
return call_user_func(static::class . '::' . $method);
}
}