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

Posted

技术标签:

【中文标题】在 hasMany 关系 Laravel 上获取具有特定值的单个项目【英文标题】:Get single item with particular value on hasMany relation Laravel 【发布时间】:2014-09-21 23:55:34 【问题描述】:

我有两张桌子:

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 中显示所有带有主图像的项目,我想获得 所有项目 和关系,但只有当“数字”等于“0”(主图像)时才具有关系。

如果使用:

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

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

最好的方法是什么?

谢谢。

【问题讨论】:

这就是你需要的softonsofa.com/… - 在关系上使用orderBy('number', 'asc') 完美!感谢 public function main_image() $this->hasOne('Image')->orderBy('number', 'asc')->latest(); 接受答案以帮助面临同样问题的其他人。 【参考方案1】:

最简单的方法是使用“助手”关系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();

【讨论】:

以上是关于在 hasMany 关系 Laravel 上获取具有特定值的单个项目的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Laravel 中的 hasMany() 关系中获取所有结果?

使用 Eloquent Laravel 获取 hasMany 关系

Laravel 关系查询加载 hasMany + BelongsToMany

如何在 Laravel 的 hasMany 关系中使用 groupBy

在 Laravel 中通过 ajax 加载更雄辩的 hasMany 关系查询?

Laravel Eloquent - 使用过滤数据获取嵌套关系