首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel Relation whereHas

Laravel Relation whereHas
EN

Stack Overflow用户
提问于 2020-07-23 21:23:00
回答 1查看 54关注 0票数 0

我用谷歌已经快2天了,我找不到我失踪的地方了

我的目标是从表Customers中获得表Customers_Contacts中的联系人,我有以下两个关系:

我的客户模型:

代码语言:javascript
运行
复制
class Customers extends Model{
   protected $table = 'customers';

   public function customerscontacts(){
    return $this->hasMany('App\Models\CustomersContacts', 'id_customer', 'id');
   }
}

我的CustomersContacts模型:

代码语言:javascript
运行
复制
class CustomersContacts extends Model{
 protected $table = 'customers_contacts';
    
    public function Customers(){
     return $this->belongsTo('App\Models\Customers', 'id', 'id_customer');
    }

}

我的问题是:

代码语言:javascript
运行
复制
$data = Customers::where(function ($query) use ($searchNome) {
                            foreach ($searchNome as $value) {
                                $query->WhereRaw("UPPER(nome) LIKE '%{$value}%'");
                            }
                        });
                        
    if($email){   $data = $data->whereHas('customerscontacts', function($query) use($email) {
                             $query->whereRaw("UPPER(contact) = '{$email}'")->where('type','email');
            });}
            
     if($contacto){   $data = $data->whereHas('customerscontacts', function($query) use($contacto) {
                             $query->where('contact',$contacto)->orwhere('contact',$contacto)->where('type','!=','email');
    });}

$data = $data->get();

这段代码正在搜索并获取来自表Customers的结果,但是结果没有显示表customers_contacts。对不起,我是新来的拉拉维尔亲戚。

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-23 21:37:16

首先..您应该修复关系:

代码语言:javascript
运行
复制
 public function Customers(){
     return $this->belongsTo('App\Models\Customers','id_customer');
    }

doc中一样,belongsTo关系的第二个参数必须是外键

然后,您可以使用eager loading加载customers_contacts

代码语言:javascript
运行
复制
$data = Customers::with('customerscontacts')->where(function ($query) use ($searchNome) {
                            foreach ($searchNome as $value) {
                                $query->WhereRaw("UPPER(nome) LIKE '%{$value}%'");
                            }
                        });
// ........

现在在$data中,您将获得一个客户集合,并且在每个“Customers”中,您将找到另一个集合“customerscontacts”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63055346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档