我正在创建自定义表单字段,并在一个表中保存字段类型,例如:
CustomFieldTypes
-------------------------------
id | type | common_name
-------------------------------
1 | v-text-area | TextArea
-------------------------------
然后在另一个表中,我保存了创建的自定义字段的详细信息,例如:
PageCustomFields
----------------------------------------------------------
id | page_id | custom_field_type_id | label | is_required
----------------------------------------------------------
2 | 2 | 1 | Name | false
----------------------------------------------------------
当我检索PageCustomFields模型时,我只想包括CustomFieldType的";类型";领域,我不需要另一个领域。我怎样才能做到这一点?我在PageCustomFields模型中尝试过这样的方法,但似乎不起作用:
public function customFieldType(){
return $this->hasOne(CustomFieldType::class, "id", "custom_field_type_id")->select('type');
}
有什么建议吗?谢谢
编辑:为了澄清,我希望在检索CustomFieldTypes的类型字段后,最终的PageCustomFields模型属性看起来像这样:
PageCustomFields
------------------------------------------------------------------------------
id | page_id | custom_field_type | custom_field_type_id | label | is_required
------------------------------------------------------------------------------
2 | 2 | v-text-area | 1 | Name | false
------------------------------------------------------------------------------
我想不出来了;这行得通吗?
public function customFieldType(){
return $this->hasOne(CustomFieldType::class, "id", "custom_field_type_id")->type;
}
如果没有,假设你使用Vue作为前端,也许你可以使用Laravel资源来过滤掉你想要的信息。
我认为您的关系应该是:
public function customFieldType(){
return $this->belongsTo(CustomFieldType::class, "custom_field_type_id");
}
我更喜欢定义没有约束的关系,然后在控制器的代码中应用所需的约束:
$value=PageCustomField::with('customFieldType:id,type')->get();
注意,这将仅选择id
(加载所需(和type
。
无论如何,如果你想这样,你可以使用addSelect:
public function customFieldType(){
return $this->belongsTo(CustomFieldType::class, "custom_field_type_id")->addSelect(['CustomFieldTypes.id','CustomFieldTypes.type']);
}
如果你想把它作为正常选择而不嵌套,你可以加入表格:
$values=PageCustomField::join('CustomFieldTypes','PageCustomFields.custom_field_type_id','=','CustomFieldTypes.id')->select('CustomFieldTypes.*')
->addSelect(['type']);