我在模型中有一对一对多关系,它可以按照我的需求工作,但是有时候我只需要返回一个记录(而不是作为集合数量)。这是我的控制器
$sesi = Sesi::with('jadwal.mapelLokal.guru','jadwal.mapelLokal.matapelajaran')->whereHas('jadwal',function($jadwal) use ($r) {
$jadwal->whereHas('mapelLokal',function($mapel) use($r) {
$mapel->where('id_lokal',$r->lokal);
});
})->get();
SESI模型
class Sesi extends Model
{
protected $table = 'sesi';
public $timestamps = false;
public function jadwal()
{
return $this->hasMany('SIAStarJadwal','id_sesi');
}
}
JADWAL模型
class Jadwal extends Model
{
protected $table= 'jadwal';
public $timestamps = false;
public function mapelLokal()
{
return $this->belongsTo('SIAStarMapelLokalGuru','id_mapel_lokal');
}
}
和mapellokalguru
class MapelLokalGuru extends Model
{
protected $table = 'mapel_lokal_guru';
protected $fillable = ['id_lokal','mapel_id','guru_id'];
public $timestamps=false;
public function mataPelajaran()
{
return $this->belongsTo('SIAStarMataPelajaran','mapel_id');
}
public function guru()
{
return $this->belongsTo('SIAStarGuru','guru_id');
}
public function formNilai()
{
return $this->hasMany('SIAStarFormNilai','id_mapel_lokal');
}
public function lokal()
{
return $this->belongsTo('SIAStarLokal','id_lokal');
}
public function postMateri()
{
return $this->hasMany('SIAStarPostKelasOnline','id_mapel_lokal');
}
}
,控制器的结果就像这样
Collection {#454 ▼
#items: array:2 [▼
0 => Sesi {#452 ▼
#table: "sesi"
//...
#relations: array:1 [▼
"jadwal" => Collection {#468 ▼
#items: array:1 [▶]
}
]
}
]
}
当您SE时,Jadwal的关系返回了一个收藏,但是我想要的只是单个记录,因为它只有一个记录。如何查询嵌套关系,因此Jadwal关系仅返回一个数据?
当您调用jadwal
关系时(例如$sesi->jadwal
),如果您只想获得第一个记录,只需致电first()
:$sesi->jadwal->first()
。
如果您始终只需要一个jadwal
关系,请考虑使用hasOne()
而不是hasMany()
。
有很多方法可以在laravel中执行此任务,例如
- 可以将
take(1)
与Builder一起返回1个记录。 - 可以使用
first()
获取第一记录。 - 可以在关系中使用
latest() or oldest() or limit(1)
。
希望这会有所帮助。随意问。
每当您需要从表中进行单个记录时,建议使用雄辩的 value()
方法。
您可能想看看。这是参考
first()
,latest()
,oldest()
等方法仍然会返回完整行。
另外,您可以使用select('column_name_of_the_record')->first()
,但我不知道为什么如果您有value()
。
我希望它能有所帮助