【问题标题】:Convert Query to Eloquent将查询转换为 Eloquent
【发布时间】:2020-01-17 09:00:44
【问题描述】:

如何用 eloquent 进行查询

SELECT employees.first_name, companies.name FROM employees
JOIN companies ON employees.company_id = companies.id

我的关系

public function employees()
{
    return $this->hasMany(Employee::class);
}

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

我使用给定 ID 获取名称,但我如何才能找到它。或者我想错了

$employee = $employee->all()->find($id)->company->name;

【问题讨论】:

    标签: sql laravel eloquent


    【解决方案1】:

    我假设您的employees 型号名称为Employeecompanies 型号名称为Company

    $employees = Employee::with('company')->get();
    
    if(!empty($employees)){
        foreach($employees as $employee){
            echo $employee->first_name;
            echo $employee->company->name;
        }
    }
    

    如果您想按 id 进行搜索,那么您可以执行以下操作。

    $employee = Employee::with('company')->find($id);
    echo $employee->company->name;
    

    【讨论】:

    • 您好,感谢您编辑了答案@N69S,但没有with,您可以使用急切加载$employee->company->name;访问
    • @DilipHirapara 只是举个例子,所以他知道他可以在查找查询中做到这一点。
    • 明白你的意思@N69S :) 感谢你专注于答案 :)
    【解决方案2】:
    $employee = Employee::where('employees.id',$id)
                ->join('companies','companies.id','=','employees.company_id')
                 ->select('employees.first_name', 'companies.name')
                  ->first();
    

    【讨论】:

    • 我很感激,很好的开始@yogesh,但 OP 用雄辩的方式提问。
    • 谢谢,我觉得这样会好很多
    【解决方案3】:

    首先这是非常糟糕的做法:

    $employee = $employee->all()->find($id)->company->name;

    这将返回所有员工集合,然后在其中搜索 id。你可以简单地使用Employee::find($id)

    现在关于您的查询,因为我猜您的公司模型有很多员工,如果您想找到所有公司员工,您必须这样做:

    $company->employees()->select('first_name')->get(); // Collection of Employee
    

    如果您想获取具有员工 ID 的特定公司员工,您可以这样做:

    $company->employees()->select('first_name')->where('id', $id)->first(); // null or Employee
    

    【讨论】:

      猜你喜欢
      • 2013-01-08
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      • 1970-01-01
      • 2020-10-03
      • 2016-11-23
      相关资源
      最近更新 更多