laravel eloquent 许多表的关系
laravel eloquent relation for many tables
我将使用 belongsTo、hasMany、....加入 4 个 eloquent 模型 laravel。
$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 关系?
为此使用关系。
在 CaseAssigment 模型中添加这 2 条记录
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 上有一个部门和一个用户。如果有很多,那么告诉我我会重写请求
试试这个,
案例分配模型:-
<?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);
我将使用 belongsTo、hasMany、....加入 4 个 eloquent 模型 laravel。
$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 关系?
为此使用关系。 在 CaseAssigment 模型中添加这 2 条记录
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 上有一个部门和一个用户。如果有很多,那么告诉我我会重写请求
试试这个,
案例分配模型:-
<?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);