Laravel:从数据库中选择

时间:2018-05-30 19:24:22

标签: mysql laravel laravel-5

在我的Laravel应用程序中,我有两个表:

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

Images
- id
- project_id
- url

如何实现它,显示每个用户拥有的所有项目和所有连接的图像(每个项目最多可包含20个图像(存储在FTP中)和字段URL中的链接 - 表“项目”中的project_id将保存在字段images.project_id)?

我了解到,我可以展示这样的项目:

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

我尝试了

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

但是我收到一条错误消息:

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

我缺少什么?感谢您指出我正确的方向: - )

亲切的问候,

的Stefan

1 个答案:

答案 0 :(得分:1)

对于您的问题,我建议使用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();