Php Laravel有很多关系,限制与查询
场景: 在Php Laravel有很多关系,限制与查询,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,场景: 在hasMany关系中,使用with函数(用于快速加载),我希望限制其中每一行的结果(而不是总数) 我遵循本教程(因为我认为这是从我所阅读的内容中实现我所需要的唯一方法)—— 我有一个模型-房间有很多评论 房间型号: class Room extends Scopes\BaseModel public function reviews() { return $this->hasMany('App\Review'); } public
hasMany
关系中,使用with
函数(用于快速加载),我希望限制其中每一行的结果(而不是总数)
我遵循本教程(因为我认为这是从我所阅读的内容中实现我所需要的唯一方法)——
我有一个模型
-房间有很多评论
房间型号:
class Room extends Scopes\BaseModel
public function reviews()
{
return $this->hasMany('App\Review');
}
public function latestReviews()
{
return $this->reviews()->latest()->nPerGroup('room_id', 1);
}
class Room extends Scopes\BaseModel
$rooms = Room::where('room_types_id', $specialism_id)
->with('latestReviews')
->get();
Scopes/BaseModel.php:
class Room extends Scopes\BaseModel
public function reviews()
{
return $this->hasMany('App\Review');
}
public function latestReviews()
{
return $this->reviews()->latest()->nPerGroup('room_id', 1);
}
class Room extends Scopes\BaseModel
$rooms = Room::where('room_types_id', $specialism_id)
->with('latestReviews')
->get();
直接复制网站教程,但名称空间为namespace-App\Scopes代码>
使用with功能的控制器:
class Room extends Scopes\BaseModel
public function reviews()
{
return $this->hasMany('App\Review');
}
public function latestReviews()
{
return $this->reviews()->latest()->nPerGroup('room_id', 1);
}
class Room extends Scopes\BaseModel
$rooms = Room::where('room_types_id', $specialism_id)
->with('latestReviews')
->get();
错误:
class Room extends Scopes\BaseModel
public function reviews()
{
return $this->hasMany('App\Review');
}
public function latestReviews()
{
return $this->reviews()->latest()->nPerGroup('room_id', 1);
}
class Room extends Scopes\BaseModel
$rooms = Room::where('room_types_id', $specialism_id)
->with('latestReviews')
->get();
RelationNotFoundException.php第20行中的RelationNotFoundException:
调用模型[App\Room]上的未定义关系[LatestReciews]
有两种方法可以做到这一点。第一个更像:
Room::with(['reviews' => function ($q) {
$q->where('*CONDITION IF NEEDED*')->orderBy('created_at', 'desc')->take(1);
}])->where('room_types_id', $specialism_id)->get();
第二种方法是使用访问器
public function getLatestReviewAttribute(){
return Review::where('room_id', $this->attributes['id'])->orderBy('created_at','desc')->take(1)->get();
}
您可以使用$room->latest\u review->review\u column\u name在视图中访问它代码>
在控制器上,您只需执行Room::all()代码> 谢谢,但这两个解决方案限制了评论的总数,而不是每个房间的评论总数。第二个解决方案限制了收藏中每个房间的评论数量请问在房间模型中我在哪里使用访问者方法