«

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

时间:2024-2-18 10:11     作者:韩俊     分类: 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();

标签: php php教程

热门推荐