Php 从laravel收集中仅获取一个数据似乎很困难

Php 从laravel收集中仅获取一个数据似乎很困难,php,laravel,collections,Php,Laravel,Collections,我不明白,我有很多东西。 在本例中,集合在索引1处包含且仅包含一个项,因为它是从更大的集合中筛选出来的。 关键是我如何获得我所需要的唯一数据,而不必重置索引值,然后访问索引0?? 在这种情况下,集合中始终只有一项,但处的索引可能不同,因此默认情况下无法使用[0]索引 //returns all items with 'item_color_id" = 1 $item = Item::where(//some constraints); $filtered = $item->filter

我不明白,我有很多东西。 在本例中,集合在索引1处包含且仅包含一个项,因为它是从更大的集合中筛选出来的。 关键是我如何获得我所需要的唯一数据,而不必重置索引值,然后访问索引0?? 在这种情况下,集合中始终只有一项,但处的索引可能不同,因此默认情况下无法使用[0]索引

//returns all items with 'item_color_id" = 1

$item = Item::where(//some constraints);

$filtered = $item->filter(function ($i) {
                return $i->item_color_id == 1;
            });

if (count($filtered)) {

    //need to access a single data inside the collection
    // like for example 'item_brand_id'
    //I can do it like this:

    $filtered = $filtered->values();

    $item_brand_id = $filtered[0]['item_brand_id'];

    //but what sense does it have?? how can we access 'item_brand_id'
    //from $filtered without resetting the indexes?

}
我们没有直接访问数据的方法,或者如果我们有,我就错过了,这对我来说没有任何意义。 例如,我可以对$filtered使用max()或min(),如下所示:

$max_brand_id = $filtered->max('item_brand_id');
在这种情况下,我知道找到max id没有任何意义,但它表明我们可以在一个段落中找到数据。 我只尝试了
('item\u brand\u id)
但当数据存在时返回空。

filter()
在需要匹配元素的集合时使用,即使只产生一个元素

如果您知道您只需要一个与真值测试匹配的元素,请改用
first()
。它有相同的签名

Item::where(...)->get()->first(function ($item) {
    return $item->item_color_id == 1;
})->get('item_brand_id');

您可以将数据库查询更改为只返回一个元素。如果结果始终只有一个,则无需加载整个集合

$item = Item::where(/*some constraints*/)->where('item_color_id', 1)->first();
if (isset($item))
    echo $item->item_brand_id;

您仍然有
雄辩的集合
,所以只需调用first()函数即可

$item_brand_id = $filtered->first()->item_brand_id;

有一个项目的集合
$item
来自何处?这是另一个集合,从过滤后的集合访问数据有什么区别?没有,因为我不想使用2个查询。在这种情况下,我需要过滤集合,因为项目可能在那里,也可能不在那里,如果它在那里,它总是只有一个,但另一个可以是多个。我只想使用一个查询来加载所有内容。然后,我也用其他方式过滤集合。不,我不需要多个查询