只返回Laravel hasOne关系中的单列



我正在创建自定义表单字段,并在一个表中保存字段类型,例如:

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']);

最新更新