laravel ORM关于如何在with语句中将第一个查询结果(一对多关系表)字段赋值给集合
在写orm的时候遇到这样一个问题;
model的关系为:
List为清单表,User为用户表,Product为产品表(包含图片字段:pic);
List : belongsTo->User;
Product : belongsTo->User;
当我查询List时,想预加载user表的信息,
同时还想通过addSelect将Product里面的该user的第一个pic字段地址不为空的查询出来赋值到集合的photo中
List::with(['user'=>function($query){
$query->select('id','user_id')
->addSelect([
'photo'=>Product::whereColumn('user_id','users.id')
->whereNotNull('pic')
->select('pic')
//->first()//尝试后,报错
//->limit(1)//尝试后,无效
//->take(1)//尝试后,无效
])->withCasts(['photo'=>'varchar'])
}])->get();
但是user跟product是一对多,会查询出很多product;
我现在只需要展示第一张product里面的pic;
所以想尝试了first()、limit(1)、take(1)做限制;
但是查询出来的都不是预期的结果;
想问下通过什么方法可以实现?(通过先查询再foreach已经拿到photo,但还是想通过在一句sql中完成)。
推荐文章: