2016-11-18 46 views
2

我可以从与函数“with”的关系中选择值吗? 所以一定是这样的:Laravel 5.1使用功能选择字段

$test = User::where('id',1)->with(['user_detail' => function($query){ 
      $query->select("detail_1"); 
     }])->get(); 

是的,我知道,我可以把选择的关系“user_detail”,但我可以用功能选择?

回答

1

您可以在with选择为你所做的例子如下:

$test = User::where('id',1)->with(['user_detail' => function($query){ 
    $query->select("detail_1"); 
}])->get(); 

但它不会工作(如您在其他答案中所述),因为您只选择了一个属性,但外键不可用ñ您的选择声明。所以,确保你也选择了相关的外键,然后它就可以工作。

在你的情况,我相信,你也选择在您选择的user_id例如:

$test = User::where('id',1)->with(['user_detail' => function($query){ 
    $query->select(
     'user_id', // This is required if this key is the foreign key 
     'detail_1' 
    ); 
}])->get(); 

所以,没有foreign key,使关系,Eloquent将无法加载相关模型,这就是为什么你在你的结果中得到null,正如你在其他评论中提到的那样。

+1

哇..谢谢!我错过了外键。 – LorenzoBerti

+0

不客气:-) –

0

是的,您可以在with()内使用select()。只是通过列的一个阵列:

$query->select(['detail_1', 'detail_2']); 

或者,你可以创建另一个关系,并添加select()它:

public function userDatails() 
{ 
    return $this->hasMany('App\UserDetail')->select(['detail_1', 'detail_2']); 
} 
+0

对于第二种解决方案好,但对于第一种解决方案。 不能正常工作。它在模型中的字段“user_detail”上返回null。 – LorenzoBerti