【问题标题】:I want to get the related client name through a hasManyThrough relationship我想通过 hasManyThrough 关系获取相关的客户名称
【发布时间】:2023-01-10 03:52:20
【问题描述】:

我需要在视图上打印客户的名称,该名称通过称为项目的临时关系引用其项目的任务。

我使用了 hasManyThrough 关系,因为我需要获取更多信息。现在我需要如上所述获取客户端名称。

Client 模型中定义的关系:

public function projects()
    {
        return $this->hasMany(Project::class);
    }

public function tasks()
    {
        return $this->hasManyThrough(Task::class, Project::class);
    }

项目模型中定义的关系:

public function client()
    {
        return $this->belongsTo(Client::class);
    }

    public function tasks()
    {
        return $this->hasMany(Task::class);
    }

任务模型中定义的关系:

public function project()
    {
        return $this->belongsTo(Project::class);
    }

我已经试过了,但无法获取客户名称

任务控制器:

public function index($id = NULL)
    {
        $tasks = Task::all();
        $project = Project::find($id)->load(['tasks']);     
        return view('task.index', compact('tasks','project'));
    }

在该任务的任务视图中,我想看到以下行:

“与(客户名称)相关的项目任务列表”

任何人都可以帮助我吗?


客户 ID- 整数名称- 细绳

项目 ID- 整数client_id- 整数名称- 细绳

任务 ID- 整数项目编号- 整数标题- 细绳

【问题讨论】:

  • 你能提供表格结构吗?
  • 我添加了其他关系以便更好地理解
  • @MarwaneEzzaze 完成
  • 你没有得到这样的问题的答复吗?
  • 不,因为在另一个问题中我问的是其他不同的东西

标签: php laravel eloquent laravel-8 laravel-9


【解决方案1】:

如果我理解正确,您首先需要在 Task 模型上添加一个关系:

    public function client()
    {
        return $this->hasOneThrough(Client::class, Project::class);
    }

这种关系将允许您获得包含此任务的项目所属的客户。 然后在你的 TaskController 上:

    public function index($id = NULL)
    {
        $tasks = Task::with(['project', 'client'])->get();
        $project = Project::find($id)->load(['tasks']);     
        return view('task.index', compact('tasks','project'));
    }

现在 $tasks 中将包含项目信息 + 客户信息

【讨论】:

  • 我得到:找不到列:“字段列表”中的 1054 未知列“projects.task_id”
【解决方案2】:

要在视图中获取客户端名称,您可以使用您在客户端模型中定义的hasManyThrough 关系。您可以通过调用客户端对象的任务方法来访问特定客户端的任务,然后使用 pluck 方法获取客户端名称列表。

这是一个示例,说明如何修改 TaskController 以将客户端名称传递给视图:

public function index($id = NULL)

{ $tasks = Task::all(); $project = Project::find($id)->load(['tasks']); $client = Client::find($project->client_id); $client_name = $client->tasks->pluck('name'); return view('task.index', compact('tasks','project', 'client_name')); }

然后,在您的视图中,您可以使用 $client_name 变量来显示客户端的名称。以下是如何修改视图以显示客户端名称的示例:

<h1>List of tasks related to projects for {{ $client_name }}</h1>

【讨论】:

    猜你喜欢
    • 2020-04-16
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 2021-10-15
    • 2018-07-24
    相关资源
    最近更新 更多