Отображение данных в шаблоне 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 protected]"
    "status" => "Email"
    "deleted_at" => null
    "created_at" => "2016-04-25 14:15:19"
    "updated_at" => "2016-04-26 10:05:06"
]

Как видите, clientId равен 1. Это ссылка на конкретного клиента. Есть ли способ получить имя клиента, используя этот идентификатор? Я знаю, как это сделать в контроллере, но я не могу передать переменную для каждого проекта, который имеет имя клиента, это было бы слишком. В нынешнем виде я просматриваю все проекты, и у каждого из них есть clientId. Каким-то образом мне нужно получить имя на основе этого.

Спасибо


person katie hudson    schedule 26.04.2016    source источник


Ответы (2)


Вы установили отношения в модели так:

Проект:

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

И вы просто пройдетесь по всем проектам

person Norgul    schedule 26.04.2016
comment
Привет, отношения есть. Дело в том, что то, что вы опубликовали, должно быть сделано в контроллере. Когда я просматриваю все проекты, я не могу делать то, что вы предлагаете, потому что это означает наличие новой переменной для каждого проекта. - person katie hudson; 26.04.2016
comment
Красиво копирую мой ответ. - person andrew-caulfield; 26.04.2016
comment
Действительно? Проверяйте время, прежде чем говорить глупости - person Norgul; 26.04.2016
comment
Часть лезвия? У вас нет цикла, у вас нет возврата контроллера, и у вас точно нет объяснения. Вопрос был о возврате всех проектов, а не одного - person Norgul; 26.04.2016

Да.

Смотря как вы создали модель для проектов.

Вы можете определить отношение внутри этой модели к клиентам.

Все будет зависеть от отношений, которые вы хотите иметь. Например, у проекта может быть несколько клиентов.

Предположим, что у одного проекта есть один клиент.

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

а затем внутри вашего шаблона блейда вы можете позвонить

{{ $project->client->name }}
person andrew-caulfield    schedule 26.04.2016