基于 Laravel 示例 Comment 与 Post 和 Video Model 具有多态关系。
我可以使用
$comment->commentable
检索带有帖子和视频的评论,但它会返回帖子或视频的所有列。
帖子有 ID、名称、其他列...
视频有id、标题、其他栏目...
如何限制某些列? 我只想发布 id 和 name 列 对于视频,仅包含 id 和标题列
->with(['commentable' => function ($query) {
$query->select('id', 'name');
}])
此代码将出错,因为视频没有名称列。
您可以在闭包中使用条件语句来检查相关模型的类型,然后相应地应用特定的列选择。
$comment = Comment::with(['commentable' => function ($query) {
// Check if model is a Post
if ($query->getModel()->getTable() === 'posts') {
$query->select('id', 'name');
}
// Check if model is a Video
elseif ($query->getModel()->getTable() === 'videos') {
$query->select('id', 'title');
}
}])->find($commentId);