У меня есть три таблицы: клиент, проект и client_project.
Я хочу показать в представлении все проекты одного клиента.
Вот объясненный код:
<?php
public function editClient($id)
{
$client = Client::find($id);
// I get an array with client_id and project_id of the clients
// which is the same I pass in the URL.
$client_project = DB::table('client_project')->where('client_id',$id)->get();
// return view('cms.public.views.clients.editclient')->withClient($client);
}
Теперь я хочу показать имена проектов, когда идентификатор поля табличных проектов имеет одинаковое значение project_id в массиве $ client_project.
Вот пример того, как это сделать, если это только одно значение, может быть, может помочь.
public function editClient($id)
{
$client = Client::find($id);
$client_project = DB::table('client_project')->where('client_id',$id)->first()->project_id;
$project = DB::table('projects')->where('id',$client_project)->first();
return $project;
}
Используйте отношения Один ко Многим.
В модели Client.php
public function projects()
{
return $this->belongsTo('App\Project', 'client_id');
}
И в вашей модели Project.php
public function client()
{
return $this->hasMany('App\Client', 'client_id');
}
Сейчас звоните
$client_project = Client::find($id)->projects;
Вы получите подробности здесь https://laravel.com/docs/5.5/eloquent-relationships#one-to-many
Вместо того, чтобы брать first()
клиентский проект, возьмите их все и используйте whereIn()
метод в выборе проекта.
$projects = DB::table('projects')->whereIn('id', function ($query) {
$query->select('project_id')->from('client_project')->where('client_id', $id);
})->get();
Вот ссылка на документацию laravel: Документация по Laravel 5.5 — Запросы # where-предложения
Я отвечаю на то, что я понял по вашему запросу, который не очень ясен.