laravel orm with如何指定select字段

框架:laravel 5.4

表: pq_coupon

pq_picture

关系:根据pq_coupon 表中 picture_id 字段,查找出pq_picture的picture_url字段

代码1:
(控制器)

   $data = $coupon
               ->with(['prcture'=>function($query){
              $query->select('picture_url');
            }])
               ->where('id','>=',1)->limit(2)->select('id','note')->get();

(models)
function prcture(){

    
    return $this->belongsTo(\App\Models\Picture::class,'picture_id','id');
}     

clipboard.png

查询失败,picture整个为空
代码2:
(控制器)

    $data = $coupon->with('prcture')->where('id','>=',1)->limit(2)->select('id','note')->get();
    

(models)

function prcture(){
    // belongsTo 多对一(从属)
    return $this->belongsTo(\App\Models\Picture::class,'picture_id','id')->select('picture_url');
}    

结果同上,都是查询picture为null

求助:如何让with()指定prcture 只查找prcture_url字段?这两种方法都不行,是版本问题?
       
               
阅读 9.5k
3 个回答

貌似是你的 Model 里面的方法有问题,belongsTo 函数的第一个参数是字符串

我再看看,老了眼睛瞎了


你对调一下两个 key 的位置

                        外键模型名称       外键_key       本表的_key
 return $this->belongsTo(Model::class, 'foreign_key', 'local_key');

$data->priture->priture_url;

这是原先的写法
(控制器)
$data = $coupon

           ->with('prcture')
           ->where('id','>=',1)->limit(2)->select('id','note')->get();
           

(models)
function prcture(){

    return $this->belongsTo(\App\Models\Picture::class,'picture_id','id');
}             

结果:

clipboard.png

所以,如何select('picture_url') ???????????????

*找到问题了,是select()

with(['prcture'=>function($query){$query->select('id','picture_url');}])
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题