在hasMany关系Laravel上获取具有特定值的单个项目

时间:2014-07-30 11:02:46

标签: laravel eloquent relation

我有两张桌子:

items (
    id
    name
    description
)

images (
    id
    item_id
    number     // 0 -> main image ; 1,2,3,4 ...  -> gallery_image
)

有这个基本关系:

#Item.php

public function images()
{
    return $this->hasMany('Image');
}

#Image.php

public function item()
{
    return $this->belongsTo('Item');
}

要在我的index.php中显示所有带有主图像的项目,我想获得所有项目和关系,但只有当" number"等于" 0" (主图)。

如果使用:

$all = $this->item->get();
foreach ($all as $one) {
        var_dump ($one->images);
}

然后我得到所有项目(完美)以及每个项目的所有图像。但我想要一个包含所有项目和每个项目一个图像的集合。

最好的方法是什么?

感谢。

1 个答案:

答案 0 :(得分:2)

最简单的方法是使用'helper'关系hasOne

它可以让您急切地加载单个相关模型:

// Use camelCase name, otherwise dynamic property won't work
public function mainImage()
{
  return $this->hasOne('Image')
    ->orderBy('number', 'asc'); 
    // or:      
    // ->where('number', 0);
}

然后你就可以使用它并急切加载它,如下所示:

$item->mainImage->number; // 0

$items = Item::with('mainImage')->get();