【问题标题】:Getting Model from DB query instead of StdClass从数据库查询而不是 StdClass 获取模型
【发布时间】:2021-12-22 20:45:23
【问题描述】:

使用最新的 Laravel,我编写了下一个查询:

        $news = DB::table('news_content')
            ->join('news_permissions', 'news_content.id', '=', 'news_permissions.news_id')
            ->select('news_content.*')
            ->whereIn('news_permissions.group_id', $allPGs)
            ->get();

在连接中使用 Eloquent 似乎很复杂。 此查询返回 StdClasses 数组,但我需要模型数组,即 NewsContent 模型,以便在 Transformer 中进一步使用它。

铸造方式:

    foreach($news as $item){
            $result[] = (NewsContent)$item;
    }

不起作用,从 StdClass 到 Model 的自定义转换的其他解决方案似乎不是最佳的。

有没有更好的方法让模型脱离 Laravels DB 查询?或者从 StdClass 到 Model 的转换过程比这个建议更短:Convert/cast an stdClass object to another class?

【问题讨论】:

  • 为什么会有很多并发症?您实际上只需要将 DB::table('news_content')-> 替换为 NewsContent::
  • 不可能...我不知道,我错过了一些东西..我无语了。谢谢!我有办法接受您的评论作为答案吗?
  • 另外,为什么不定义关系,那样你可能会失去->join
  • 我已经定义了关系 $this->hasMany(NewsPermission::class, 'news_content_id');但是我现在如何摆脱加入呢?

标签: laravel eloquent model transformer


【解决方案1】:

在连接中使用 Eloquent 似乎很复杂

为什么,你只需要调用你的查询生成器来抛出你的模型:

 $news = NewsContent::join('news_permissions', 'news_content.id', '=', 'news_permissions.news_id')
            ->select('news_content.*')
            ->whereIn('news_permissions.group_id', $allPGs)
            ->get();

请注意,Eloquent 在 Model.php 抽象类内部使用查询构建器:

  * @param  \Illuminate\Database\Query\Builder  $query
     * @return \Illuminate\Database\Eloquent\Builder|static
     */

    public function newEloquentBuilder($query)
    {
        return new Builder($query);
    }

【讨论】:

  • 是的,如果定义了关系,您可以删除连接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 2010-12-23
  • 2011-04-08
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多