如何在1个表中快速加载2个不同的关系Laravel

rmbxnbpk  于 2023-03-13  发布在  其他
关注(0)|答案(3)|浏览(128)

我有一个问题,急于加载2关系在1表在laravel 9。我有表称为照片有关系的用户和照片_类别。所以我想实现的是加载用户和类别在同一时间。我也已经声明了关系的模型。我已经尝试是像代码如下

$photos = Photo::with('user','photoCategory')->where('id',$request->id)->first(); //at show method

$photos = new PhotoCollection(Photo::with('user','photoCategories')->OrderByDesc('id')->paginate(10));//at index method

我在Photo Model的关系

public function user(){
 return $this->BelongsTo(User::class);
}
public function photoCategory(){
 return $this->HasMany(FotoCategory::class);
}

我在用户模型中的关系

public function photo(){
 return $this->HasMany(PhotoCategory::class);
}

我在用户照片类别模型的关系

public function photo(){
 return $this->BelongsTo(Photo::class);
}

请帮我解决问题,先谢谢你

siotufzp

siotufzp1#

你的照片模型似乎有问题。photoCategory方法应为BelongsTo关系:

public function photoCategory()
{
    return $this->belongsTo(PhotoCategory::class);
}

在用户模型中:

public function photos()
{
    return $this->hasMany(Photo::class);
}

以下是最终输出关系数据:

$photos = Photo::with('user', 'photoCategory')->where('id', $request->id)->first();

$photos = new PhotoCollection(Photo::with('user', 'photoCategory')->orderByDesc('id')->paginate(10));

希望这对你有帮助。

gcuhipw9

gcuhipw92#

看起来代码中有一处打字错误,在急于加载photoCategory关系时,您在with方法中调用了photoCategories而不是photoCategory。
尝试像这样更新代码:

$photos = Photo::with('user', 'photoCategory')->where('id', $request->id)->first(); //at show method

$photos = new PhotoCollection(Photo::with('user', 'photoCategory')->orderByDesc('id')->paginate(10)); //at index method

此外,确保您的PhotoCategory模型与Photo模型之间存在belongsTo关系,如下所示:

public function photo(){
    return $this->belongsTo(Photo::class);
}
0ejtzxu1

0ejtzxu13#

照片表有一个名为category_id的外键,对吗?如果有,在照片模型上:

public function user(){
 return $this->belongsTo(User::class);
}

public function photoCategory(){
 return $this->belongsto(PhotoCategory::class, 'category_id');
}

然后,你可以收集照片

Photo::with('user','photoCategories')->paginate()

或照片示例

Photo::with('user','photoCategories')->where('id', $id)->first()

相关问题