【问题标题】:Laravel Eloquent - Multiple Form SubqueryLaravel Eloquent - 多表单子查询
【发布时间】:2019-07-21 03:55:51
【问题描述】:

我正在使用 Laravel 和它提供的 Eloquent ORM,但我很难选择我需要的数据。我有 2 个模型

Company
Member

我该怎么做?

SELECT * FROM members m, companies c 
WHERE (m.main_type = "2" AND m.main_id = c.id AND m.status = "1") 
AND ((m.username LIKE "%keywords%") OR (c.name LIKE "%keywords%"))

【问题讨论】:

  • 请显示两个表的表结构
  • 模特之间有关系吗?

标签: php laravel eloquent


【解决方案1】:

考虑到公司可以有多个成员,你需要先有关系:

Company模特:

public function members(){
    return $this->hasMany(Member::class);
}

Member模特:

public function company(){
    return $this->belongsTo(Company::class,'main_id');
}

然后你可以使用关系来获取数据:

$result = Company::with(['members' => function($q){
    return $q->where('main_type', 2)->where('status', 1)->where(function($sq){
        return $sq->where('username', 'like', '%keywords%')
                  ->orWhere('name', 'like', '%keywords%');
    });
}]);

根据您的外键名称更新关系的提示。我建议保持更直观,例如 member_idcompany_id

【讨论】:

    【解决方案2】:

    它应该看起来像这样。你不需要子查询。

    Member::join('companies', 'companies.id', '=', 'members.main_id')
        ->where(function($query) {
            $query->where('main_type', 2)->where('status', 1);
        })->where(function($query) {
            $query->where('username', 'like', '%keywords%')->orWhere('name', 'like', '%keywords%');
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-21
      • 2017-07-30
      • 2021-05-12
      • 1970-01-01
      • 2016-06-13
      • 1970-01-01
      相关资源
      最近更新 更多