关联预加载怎么避免加载关联的关联?
谢谢 @zxdstyle 和 @leo 两位老师的指导和提示,我意识到问题所在了,是因为我在apartment中设置了追加到模型的beds_count属性,用来统计床位数量,在对应的函数中我调用了apartment->rooms,关闭这个追加的beds_count后即可正常显示。
至于beds_count的更好的解决办法是通过设置apartment与bed模型的远程一对多关联,然后withCount即可。
Laravel版本:6.0
我在使用模型关联查询的预加载时,发现with会预加载关联的关联,具体请看描述:
class Apartment extends Model
{
public function rooms()
{
return $this->hasMany('App\Models\Room');
}
}
class Room extends Model
{
public function Apartment()
{
return $this->belongsTo('App\Models\Apartment');
}
}
我现在通过ajax查询想要返回符合条件的room列表同时包含room所属的apartment的title属性。
我尝试的代码:
$rooms = $room->with('apartment:id,title')
->orderBy($sortName,$sortOrder)
->offset($offset)
->limit($limit)
->get();
return $rooms;
现在的问题是这样返回的room列表中,包含了room的关联apartment的关联:roomsroom->apartment->rooms,这样数据量大的情况下,查询的非常慢。
我想请问一下,要怎么才能在room列表中只包含room->apartment->title呢?
即便我取消了通过with关联预加载,采用foreach循环方式获取room->apartment->title,返回的rooms列表中仍然包含room->apartment->rooms!
附上Room::with(‘apartment’)与Room::with(‘apartment:id,name’)这两种方式的返回值截图:
可以看到不论设置不设置with的字段限制,都会返回apartment->rooms,这么一大堆没用的东西。
推荐文章: