使用Laravel ORM中的where条件从多个关系表中选择特定的列值

时间:2019-06-30 10:19:23

标签: laravel laravel-5 eloquent eloquent--relationship

我有两个名为contactsclients的表。两个表都将group_id作为Foreign_key。现在,当用户phone$request->groupid表中找到一个组时,我想从两个表中获取groups列值。我正在尝试这样的事情。但是得到空数组。有人可以帮我吗!

$getPhoneNumbers = Group::with(['hasContacts' => function($query){
                             $query->select('phone')->where('is_active', 1);
                        }])->with(['clients' => function($q){
                             $q->select('phone')->where('status', 1);
                        }])->where('id', $request->groupid)->get();

模型中-

public function clients()
{
    return $this->hasMany('App\Client', 'group_id', 'id');
}

public function hasContacts()
{
    return $this->hasMany('App\Contact', 'group_id', 'id');
}

2 个答案:

答案 0 :(得分:0)

如果要使用关系方法,则应首先获取组对象,然后调用它们。另外,请按照约定将hasContacts()重命名为contacts()

$group = Group::find($request->groupid);

if (!$group) {
    # group not found
}

$clientPhoneNumbers = $group->clients()->where('status', 1)->pluck('phone')
$contactPhoneNumbers = $group->contacts()->where('is_active', 1)->pluck('phone')

这使用pluck获得雄辩的Collection单列。您可以使用$clientPhoneNumbers->toArray()来获取电话号码作为一个数组(其他Collection也是如此)。

组模型:

public function clients()
{
    return $this->hasMany('App\Client', 'group_id', 'id');
}

public function contacts()
{
    return $this->hasMany('App\Contact', 'group_id', 'id');
}

答案 1 :(得分:0)

您还需要选择Laravel需要的外键<your-app> has no Buildpack URL set. ,以将热切的加载结果与父母匹配:

Gemfile