thinkphp6 hasOne 查询的问题

现在有两张表:

表1(ProjectTax)中包含字段
id, category_id

表2(TaxCategory)中包含
id, category_name


我想在查询表1的时候,同时将表2的category_name字段包含到查询结果里来。

在表1的模型中,我新增了关联定义:

public function taxCategory()
{
    return $this->hasOne(TaxCategory::class, "id", "category_id");
}

然后在控制器中查询:

$data = ProjectTax::with('taxCategory')->where('project_id', $id)->select();
return json($data);

得到的结果如下,taxCategory这个字段把关联表的所有字段都给包含进来了(id, tax_name, sort_id)

请问怎么做才可以让taxCategory这个字段只包含tax_name字段的值呢?
我理想的返回结果是
……
taxCategory: "增值税"
……
或者,如果能把taxCategory显示为tax_name/category_name这样更好了
……
category_name: "增值税"
……

再简单一点说,就是让taxCategory包含的是关联表的某个字段,而不是整个表。


我尝试过修改表1模型的关联方法(taxCategory()):

return $this->hasOne(TaxCategory::class, "id", "category_id")->field('tax_name');

如果这样的话,返回值里的taxCategory就是null了。

return $this->hasOne(TaxCategory::class, "id", "category_id")->field('id,tax_name');

如果上面这样加上id字段,则可以成功返回值,但是跟一开始的问题一样,返回值taxCategory依然是个包含2个字段的对象。

请有经验的大佬指点一下,Thanks♪(・ω・)ノ

阅读 3.6k
1 个回答

搞定了,修改表1的关联方法:

return $this->hasOne(TaxCategory::class, "id", "category_id")->bind(['tax_name']);

这样返回的结果为:

关联表的tax_name字段被绑定添加到了父模型中,完美解决了我的问题。

参考官方文档:一对一关联/绑定属性到父模型https://www.kancloud.cn/manua...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进