在我的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
答案 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();