Laravel Eloquent关联多个表的方法

3

我将使用Laravel中的belongsTo、hasMany等方法来连接4个Eloquent模型。

$result = \DB::select(
        'ca.*',
        array(DB::expr('CONCAT(u.first_name, " ", u.last_name)'), 'user'),
        array(DB::expr('CONCAT(u.first_name, " ", u.last_name)'), 'full_name'),
        array('u.id','user_id'),
        array('d.name','department_name'),
        array('d.clean_name','department_clean_name'),
        array('d.id','department_id'),
        array('u.extension','user_extension'),
        array('u.mobile','user_mobile'),
        array('u.email','email')
    )
        ->from(array('case_assignments', 'ca'))
        ->join(array('departments', 'd'), 'left')->on('d.id','=','ca.department_id')
        ->join(array('users', 'u'), 'left')->on('u.id','=','ca.user_id')
        ->where('case_id','=', $case_id)
        ->get();

我该如何将这个转换为Laravel Eloquent关系?

2个回答

1
使用关系来完成这个任务。 在CaseAssigment模型中添加这两条记录。
public function user() {
    return $this->belongsTo(User::class);
}

public function department() {
    return $this->belongsTo(Department::class);
}

而且查询

$result = CaseAssigment::query()
    ->with([
        'departament' => function($departaments){
            $departament->select('id', 'name', 'clean_name');
        },
        'user' => function($users){
            $user->select('id', DB::raw('CONCAT(first_name, last_name) AS full_name'), 'extension', 'mobile', 'email');
        }
    ])
    ->where('case_id','=', $case_id)
    ->get();

我觉得你在CaseAssigment上有一个部门和一个用户。如果有很多的话,告诉我,我会重新写请求。


0

试试这个,

CaseAssignment 模型:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class CaseAssignment extends Model
{
    public function department()
    {
        return $this->BelongsTo('App\Models\Department','department_id');
    }
    public function user()
    {
        return $this->BelongsTo('App\User','user_id');
    }
}

部门模型:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Department extends Model
{
   public function caseAssignments()
    {
        return $this->hasMany('App\Models\CaseAssignment');
    }
}


用户模型:-

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
   public function caseAssignments()
    {
        return $this->hasMany('App\Models\CaseAssignment');
    }
}

在控制器中:

$result = CaseAssignment::with('department','user')->where('case_id','=', $case_id)
        ->get();

dump($result->department->name);
dump($result->department->clean_name);
dump($result->department->id);
dump($result->user->extension);
dump($result->user->mobile);
dump($result->user->email);
dump($result->user->first_name.' '.$result->user->last_name);
dd($result);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接