在Blade模板中显示数据

时间:2016-04-26 10:01:21

标签: laravel laravel-5 laravel-blade

在我的控制器中,我将模板传递给项目列表

$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。不知何故,我需要将此命名为基于此。

谢谢

2 个答案:

答案 0 :(得分:3)

你是否在模特中建立了关系:

<强>项目:

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

如果您这样做,只需拨打Project::find($id)->client

即可访问所需的客户端

如果您想通过控制器转发它,您可以这样做:

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

将客户端JSON嵌套在项目中。

修改

但是,如果我理解正确,你的问题是在视图中显示它而不需要做变量。如果您正在使用刀片进行查看,则可以使用foreach循环执行此操作:

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

您只需遍历所有项目

答案 1 :(得分:1)

看到你为项目创建了一个模型。

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

这一切都取决于你希望它拥有的关系。例如,项目可以有多个客户端。

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

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

然后在您的刀片模板中,您可以调用

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