如何在使用雄辩orm时只让第一个孩子成为父母?
问题描述:
我试图从我的相册表中获取活动(即活动= 1)相册,该相册表中至少有一个活动图像,第一个活动图像按创建日期的降序排列。即每张专辑的图像必须是要创建的最后一个活动图像。如何在使用雄辩orm时只让第一个孩子成为父母?
相册模式是:
class Album extends Model {
public function images()
{
return $this->hasMany('Images','album_id');
}
public function scopeActive($query){
return $query->where('is_active', 1);
}
}
我的图片型号是:
class Images extends Model {
public function scopeActive($query){
return $query->where('is_active', 1);
}
public function album(){
return $this->belongsTo('Album', 'album_id', 'id');
}
}
到目前为止,我想出了以下内容:
$albums = Album::with(['images' => function($query){
$query->orderBy('created_at', 'desc');
$query->first();
}])
->whereHas('images', function ($query) {
$query->active();
})
->active()
->get();
上述结果会给我以下阵列与图像只有一个相册:
Array
(
[0] => Array
(
[id] => 2
[name] => Test Gallery
[slug] => test-gallery
[description] => this is test gallery
[cover_image] =>
[is_active] => 1
[created_by] => 2
[updated_by] => 2
[deleted_at] =>
[images] => Array
(
)
)
[1] => Array
(
[id] => 3
[name] => My Gallery 2
[slug] => my-gallery-2
[description] => Hello, this is my second gallery.
[cover_image] =>
[is_active] => 1
[created_by] => 2
[updated_by] =>
[deleted_at] =>
[images] => Array
(
[0] => Array
(
[id] => 9
[album_id] => 3
[image] => gallery_xfWjm0JuzZ.jpg
[description] =>
[is_active] => 1
[created_by] => 2
[updated_by] =>
[deleted_at] =>
)
)
)
)
任何人都可以帮助我实现我想要做的。
答
你应该尝试这样的:
class Album extends Model
{
public function image()
{
return $this->images()
->active()
->orderBy('created_at', 'desc')
->take(1)
->first();
}
public function images()
{
return $this->hasMany('Images','album_id');
}
public function scopeActive($query){
return $query->where('is_active', 1);
}
}
$albums = Album::active()->whereHas('images', function ($query) {
$query->active();
})->get();
foreach ($albums as $album) {
var_dump($album->image());
}
答
所有你需要的是whereHas
方法:
$albums = Album::whereHas('images', function ($query) {
$query->where('is_active', 1)->orderBy('created_at', 'desc');
})->get();
这将检索至少有一个活动图像
+0
但这不会检索所有专辑的第一张图像,是吗? – razn
什么结果做的所有专辑你得到你当前的查询? – Jerodev
请再次看到问题,我添加了从我的查询中得到的数组结果。 – razn