Laravel: Выбрать из базы данных - PullRequest
0 голосов
/ 30 мая 2018

в моем приложении Laravel У меня есть две таблицы:

Projects
- id
- user_id 
- name
- etc...

Images
- id
- project_id
- url

Как мне этого добиться, чтобы показать все проекты, которые есть у каждого пользователя, и все подключенные изображения (каждый проект может иметь до 20 изображений (хранится в FTP) и Ссылка в поле URL - идентификатор_проекта из таблицы "Проекты" будет сохранен в поле images.project_id)*

и я пытался с

$images = DB::table('images')->where('project_id','=',$projects->id)->get();

Но я получаю сообщение об ошибке:

Property [id] does not exist on this collection instance.

Чего мне не хватает?Спасибо, что указали мне правильное направление: -)

С уважением,

Стефан

1 Ответ

0 голосов
/ 31 мая 2018

Для вашего вопроса я предлагаю использовать eloquent , как настроить ваши модели

class Project extends Model
{
    public function images()
    {
        return $this->hasMany(\App\Models\Image::class, 'project_id');
    }

    public function user()
    {
        return $this->belongsTo(\App\Models\User::class, 'user_id');
    }
}

class Image extends Model
{
    public function project()
    {
        return $this->belongsTo(\App\Models\Project::class, 'project_id');
    }
}

Теперь, чтобы найти проекты с их изображениями, вы можете запросить как

$projects = Project::with('images')->get();

Каждый объект в $projects будет иметь коллекцию связанных изображений.

Чтобы добавить фильтр для пользователя, вы можете использовать whereHas для отношений

$projects = Project::with('images')
                    ->whereHas('user', function ($query) use ($user) {
                        $query->where('id', '=', $user->id);
                    })->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...