【发布时间】:2021-05-09 20:24:03
【问题描述】:
我想通过 Eloquent 使用外键从控制器中获取包含另一个类的数据的字段。我不确定这是否可能。
场景
模特工作
class Job extends Model
{
use HasFactory;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'id',
'job_name',
'id_customer',
];
// relación 1:n de Client amb Feines
public function customer()
{
return $this->belongsTo(Customer::class, 'id_customer');
}
//Relacion 1:N de Jobs i Taskjob
public function TaskJobs()
{
return $this->hasMany(TaskJob::class);
}
}
模型客户
class Customer extends Model
{
use HasFactory;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'id',
'customer_name',
];
//Relacion 1:N de Clients i Feines
public function jobs()
{
return $this->hasMany(Job::class);
}
}
模型任务作业
class TaskJob extends Model
{
use HasFactory;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'id',
'id_job',
'id_concept',
'id_user',
'start_task',
'finish_task',
'quantity',
'timetask',
];
//Relacion 1:N de Jobs i Taskjob
public function jobs()
{
return $this->belongsTo(Job::class, 'id_job');
}
//Relacion 1:N de Concept i Taskjob
public function concepts()
{
return $this->belongsTo(Concept::class, 'id_concept');
}
//Relacion 1:N de Users i Taskjob
public function users()
{
return $this->belongsTo(User::class, 'id_user');
}
}
外键允许类之间的数据访问。例如,我可以获取 TaskJob 的一个对象,我可以从另一个类中获取 customer_name 或其他数据。
来自TaskJobController:
public function index()
{
$usuario = auth()->user();
$taskJobs= TaskJob::where('id_user', $usuario->id)->orderBy('start_task', 'DESC')->Paginate(10);
return view('taskjobs.index')
->with('taskjobs', $taskJobs)
->with('usuario', $usuario);
}
从视图中我可以将数据显示为:
@foreach($taskjobs as $taskJob)
<tr>
<td>{{ $taskJob->jobs->customer->customer_name}}</td>
<td>{{ $taskJob->jobs->job_name }}</td>
<td>{{ $taskJob->concepts->concept_name }}</td>
</tr>
@endforeach
这行得通...
但现在我想向 Vue 组件发送一个 json。我正在考虑修改控制器以获取信息并发送到 json:
public function getCurrentTasks()
{
$data = TaskJob::select('id','id_job','id_concept','id_user')->orderBy('id')->get();
return response()->json($data);
}
这可行,但我需要从 'TaskJob/id_job' 获取数据到 'Job/job_name' 我不知道该怎么做。
也许:
$data = TaskJob::select('id','id_job'->'Jobs::job_name','id_job'->'Jobs::id_customer'->'Customer::customer_name','id_user' )->orderBy('id')->get();
错了……
请您帮忙将另一个表中的数据以 eloquent 的方式获取到外键?
谢谢;
【问题讨论】:
-
我不确定我是否理解您的需求,但也许
TaskJob::with('jobs')->select('id','jobs.name',...)->get()? -
我需要获取这些字段:TaskJob.id、Jobs->id_customer->Customer.customer_name、Jobs.job_name。使用 Eloquent 需要来自不同类的数据。
标签: php laravel vue.js eloquent orm