Select 来自多个关系的特定列值 table 使用 Laravel ORM 中的 where 条件
Select specific column value from multiple relational table using where condition in Laravel ORM
我有两个 table,名为 contacts
和 clients
。两个 table 都具有 group_id
作为 foreign_key。现在,当用户 $request->groupid
从 groups
table 中找到一个组时,我想从两个 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();
我有两个 table,名为 contacts
和 clients
。两个 table 都具有 group_id
作为 foreign_key。现在,当用户 $request->groupid
从 groups
table 中找到一个组时,我想从两个 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();