Laravel 5.1用函数选择字段

时间:2016-11-18 09:36:19

标签: php laravel laravel-5 eloquent

我可以从功能关系中选择值"使用" ? 所以做这样的事情:

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

是的我知道我可以选择关系" user_detail"但我可以选择功能吗?

3 个答案:

答案 0 :(得分:2)

您可以在with范围内选择以下示例:

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

但它无法正常工作(正如您在其他答案中所评论的那样),因为您只选择了一个属性,但外键在您的select语句中不可用。因此,请确保您也选择相关的外键,然后它就能正常工作。

在您的情况下,我相信您也可以在您的选择中选择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 keyEloquent就无法加载相关模型,这就是为什么你得到null的原因你在其他评论中提到的结果。

答案 1 :(得分:0)

是的,您可以在select()内使用with()。只需传递一列列:

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

或者,您可以创建另一个关系并向其添加select()

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

答案 2 :(得分:0)

$result = Staff::where('live_status',2)
            ->with('position')->with('department')->with('gender')
            ->with(['partner' => function($query){
                    $query->where('alive',0);
                }]);