Laravel Join查询返回空列

时间:2019-06-06 07:15:07

标签: mysql sql laravel

我有一个成员表,其中包含一些条目。每个成员都可以在laravel的 users 表中创建一个用户帐户。

他们每个人都有一个名为“ person_id” 的字段,这就是建立连接的方式。

我有一个搜索返回所有列表。我有一个“仅搜索已注册”复​​选框,这意味着它仅返回拥有用户帐户的成员,否则,如果未选中该复选框,则返回所有用户的混合体。

问题是,无论是否选中此复选框,都必须为每个人拉取person_id。

if($reg == 'on') {
        $Members = $Members->rightJoin('users', 'users.person_id', '=', 'members.person_id');
    }
    else {
        $Members = $Members->leftJoin('users', 'users.person_id', '=', 'members.person_id');
    }

我尝试了leftJoin,但person_id为空

3 个答案:

答案 0 :(得分:0)

首先,如果您使用的是Eloquent,我可以告诉您缺少“-> get();”在每个查询的末尾。

希望这会有所帮助。

答案 1 :(得分:0)

在成员模型中使用关系:

public function user()
{
    return $this->belongsTo('App\User', 'person_id', 'person_id' );
}

public function getMemberWithUser()
{
    return $this->select('*')->with('user')->get()->toArray();
}

,并在控制器中使用(new Member)->getMemberWithUser();。这将返回您与用户的会员详细信息。

答案 2 :(得分:0)

我认识了那些没事的人。

大多数成员还没有用户帐户,只有2个帐户。选择并没有指定要从中获取person_id的表。由于大多数成员都缺少用户帐户,因此它试图从用户那里获取该帐户。

我这样做:

 $Participants = Member::select(
        'members.first_name',
        'members.last_name',
        'members.person_id',
        'members.email'
    );