关联模型,查询时怎么指定字段

求助各位

现有两张表 user 和 videos。我在 user 模型中和 videos 创建一对多关联

/**
* 关联视频表
* */
public function videos()
{
    return $this->hasMany(Video::class, 'user_id');
}

查询如下

$user = User::where('id', 1)->first();
$videos = $user->videos;

现在只需要 videos 表中的 title 和 path 两个字段

直接使用 select(['title', 'path']) 指定字段的话,会报错 user 表中没有 title 字段

怎么在查询时指定要查询的 videos 表的字段

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

预加载

$user = User::with('videos:title,path')->where('id', 1)->first();
4年前 评论
讨论数量: 5

预加载

$user = User::with('videos:title,path')->where('id', 1)->first();
4年前 评论

预加载

$user = User::with('videos:title,path')->where('id', 1)->first();
4年前 评论

$user = User::with(‘videos’=>function($query){
$query->select('需要的字段')->where(过滤条件);
})->where('id', 1)->first();

4年前 评论
phperAdolph 3年前

@qf-Z 请问,为什么我用这个方法查询出来的是空的,不指定字段是正常的

$user = User::with('videos:id')->where('id', 1)->first();
$user->videos // 为空

$user = User::with('videos')->where('id', 1)->first();
$user->videos // 正常
4年前 评论
lddtime 4年前
airy (作者) (楼主) 4年前

@airy

$user = User::with('videos:title,path,user_id')->where('id', 1)->first();

关联时需要外键吧,建议先看看文档,有详细说明的。

4年前 评论
airy (楼主) 4年前
linshenme
$user = User::query()->with(['videos'])->where('id',1)->first();
$videos = $user->videos;
4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!