【问题标题】:Laravel - Get data between tables using foreign key in EloquentLaravel - 在 Eloquent 中使用外键获取表之间的数据
【发布时间】: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')-&gt;select('id','jobs.name',...)-&gt;get()?
  • 我需要获取这些字段:TaskJob.id、Jobs->id_customer->Customer.customer_name、Jobs.job_name。使用 Eloquent 需要来自不同类的数据。

标签: php laravel vue.js eloquent orm


【解决方案1】:

使用这个

我不确定,但试试这个

public function index()
{
    $usuario = auth()->user();
    $taskJobs= TaskJob::(['rel1','rel2'])->where('id_user', $usuario->id)->orderBy('start_task', 'DESC')->Paginate(10);
    return view('taskjobs.index')->with(['taskjobs', 'usuario');
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 2021-06-15
    • 2022-06-13
    • 2018-12-08
    相关资源
    最近更新 更多