Laravel 一对多关联模型 Eloquent下with() 函数只返回指定列

PHP 投稿 9700 0 评论

Laravel 一对多关联模型 Eloquent下with() 函数只返回指定列

这篇关于Laravel 一对多关联模型 Eloquent下with() 函数只返回指定列的文章,觉得挺不错的,感兴趣的php开发者可以参考下,希望对大家在学习php的成长路上有所帮助!

下面我们来看一篇关于Laravel Eloquent下with() 函数只返回指定列的例子,希望这个例子能够为各位带来帮助,具体的如下所示。

通过 with 函数获取数据的例子参照:laravel实现一对多关联模型数据查询

接着上面这篇文章,我们知道这里获取的是 user 的所有字段信息,但是我们可能并不需要 user 表中所有的字段,例如我们只需要 id 和 name 两个字段,即:


select * from `posts`
select id,name from `users` where `users`.`id` in (<1>,<2>)

我们可以通过下面四种方法来实现

方法一:在 with() 中指定


Post::with(['user' => function($query) {
    $query->select('id','name');
}])->get();

方法二:修改 Model 文件

修改 Post.php 文件中 user() 方法:


public function user() {
    return $this->belongsTo('User')->select(['id', 'name']);
}

然后直接调用:


Post::with('methodUser')->get();

方法三:

在 Model 基类中定义一个范围查询(或者使用 Trait)


class BaseModel extends \Eloquent {
    public function scopeWithOnly($query, $relation, array $columns) {
        return $query->with([$relation => function ($query) use ($columns) {
            $query->select(array_merge(['id'], $columns));
        }]);
    }
}

在我们普通的 Model 类都继承基类:


class Topic extends BaseModel {
    public function user() {
        return $this->belongsTo('User');
    }
}

然后使用就很方便了:


Posts::find(20)->withOnly('user', ['name'])->get();

方法四:

直接:


Posts::find(20)->with('methodUser:id,name')->get();

总结

以上就是关于Laravel 一对多关联模型 Eloquent下with() 函数只返回指定列全部内容,希望这篇文章能够帮你解决如相关的PHP问题,更多请关注PHP栏目的其它相关文章!

编程笔记 » Laravel 一对多关联模型 Eloquent下with() 函数只返回指定列

赞同 (49) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽