morphTo关联获取多模型时,如何设置每种模型指定select的字段?
假设有三个表
posts
字段 | 类型 |
---|---|
id | int |
title | varchar(64) |
created_at | timestamp |
threads
字段 | 类型 |
---|---|
id | int |
content | text |
created_at | timestamp |
comments
字段 | 类型 |
---|---|
id | int |
target_type | varchar(64) |
target_id | int |
content | text |
created_at | timestamp |
按照文档 Comment
模型写上
public function target()
{
return $this->morphTo();
}
当我获取评论列表并且预加载 target
$comments->loadMissing(['target']);
我的问题就是如何指定字段,比如 target
是 Post
时,只选择 “id”, “title” 字段,target
是 Thread
时,只选择 “id”, “content” 字段。
实践结果证明无法统一 select
但是我们可以使用
查询作用域
来实现, 在不同模型上统一定义同名查询作用域,然后分别实现自己的 select 字段然后
这样就可以实现问题提到的效果