在 Blade 模板中显示数据

Displaying data in Blade template

在我的控制器中,我向模板传递了一个项目列表

$projects = Project::all();
return view('projects.index', compact('projects'));

现在一个项目有一个客户,一个客户属于一个项目。如果我在我的视图中循环我的项目,我会得到以下数据

#attributes: array:11 [▼
    "id" => "25"
    "jobNumber" => "J0001"
    "projectName" => "Some Name"
    "clientId" => "1"
    "clientContact" => "Some Contact"
    "contactEmail" => "email@email.co.uk"
    "status" => "Email"
    "deleted_at" => null
    "created_at" => "2016-04-25 14:15:19"
    "updated_at" => "2016-04-26 10:05:06"
]

如您所见,clientId 为 1。这链接到特定客户端。有什么方法可以使用此 ID 获取客户端名称吗?我知道如何在控制器中执行此操作,但我无法为每个具有客户名称的项目传递一个变量,这太多了。就目前而言,我正在传递所有项目的视图,并且每个项目都有一个 clientId。不知何故,我需要根据这个来命名。

谢谢

你在模型中建立关系了吗:

项目:

public function client()
    {
        return $this->hasOne('App\Project');
    }

如果您这样做了,只需致电 Project::find($id)->client

即可联系到您需要的客户

如果想通过controller转发,可以这样:

$projects = Project::with('client');
return view('project.index', compact('projects'));

这将在项目下嵌套客户端JSON。

编辑:

但是,如果我理解正确的话,您的问题是在视图中显示它而不需要做大量的变量。如果您使用 blade 作为视图,则可以像这样使用 foreach 循环:

@foreach($projects as $project)
    {{$project->client->name}}
@endforeach

而您将简单地遍历所有项目

是的。

看到您为项目创建模型。

您可以在该模型中定义与客户的关系。

这完全取决于您希望它拥有的关系。例如,一个项目可以有多个客户吗?

假设一个项目有一个客户。

 /**
 * Get list of clients for project
 * @return object
 */
public function client()
{
    return $this->hasOne('App\Project');
}

然后在您的 blade 模板中您可以调用

{{ $project->client->name }}