仅检索特定列的多晶型关系的注释父级

问题描述 投票:0回答:1

基于 Laravel 示例 Comment 与 Post 和 Video Model 具有多态关系。

我可以使用

$comment->commentable
检索带有帖子和视频的评论,但它会返回帖子或视频的所有列。 帖子有 ID、名称、其他列... 视频有id、标题、其他栏目...

如何限制某些列? 我只想发布 id 和 name 列 对于视频,仅包含 id 和标题列

->with(['commentable' => function ($query) {
          $query->select('id', 'name');
      }])

此代码将出错,因为视频没有名称列。

laravel laravel-5 eloquent laravel-8 eloquent-relationship
1个回答
0
投票

您可以在闭包中使用条件语句来检查相关模型的类型,然后相应地应用特定的列选择。

$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);
© www.soinside.com 2019 - 2024. All rights reserved.