Select 来自多个关系的特定列值 table 使用 Laravel ORM 中的 where 条件

Select specific column value from multiple relational table using where condition in Laravel ORM

我有两个 table,名为 contactsclients。两个 table 都具有 group_id 作为 foreign_key。现在,当用户 $request->groupidgroupstable 中找到一个组时,我想从两个 table 中获取 phone 列值。我正在尝试这样的事情。但是得到空数组。请有人帮助我!

$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');
}

如果你想使用关系方法,你应该首先获取组对象然后调用它们。另外,请将 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 将单个列作为 eloquent Collection。您可以使用 $clientPhoneNumbers->toArray() 将 phone 数字作为数组获取(对于其他 Collection 也是如此)。

群模型:

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

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

您还需要 select Laravel 需要的外键 group_id 以将预加载结果与其父项匹配:

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