首页  >  问答  >  正文

Laravel Eloquent 的 where 方法仅返回数据库中第一条记录的数组

我有这样的代码:

$subOffers = SubOffer::get()->where('offers_id', 1);

当我返回 $subOffers 时,我得到了一个像这样的数组。

[{"id":1,"offers_id":"1","price":"123.0","start_date":"2022-07-23","stop_date":"2022-07-24","additional_info":"r832ufr803yw98fhew98f8h93wq"}]

但是当我将 1 更改为 2 或 3 或 4 或...时,我得到了一个像这样的对象。

{"3":{"id":4,"offers_id":"4","price":"12,341","start_date":"2022-07-10","stop_date":"2022-07-13","additional_info":null}}

在本例中,我将其更改为 4,并且获得了 n-1 密钥。

这是怎么回事?为什么我收到的是对象而不是数组?当 Offers_id 大于 1 时,就会发生这种情况。 Offers_id 是外键。

P粉966979765P粉966979765313 天前502

全部回复(2)我来回复

  • P粉136356287

    P粉1363562872024-01-04 09:37:25

    好的,我找到了解决方案

    $subOffers = SubOffer::where('offers_id', $id)->get();

    只是我必须将 whereget 交换

    但是我还是不知道,这是怎么回事?我想知道为什么会这样。

    回复
    0
  • P粉404539732

    P粉4045397322024-01-04 09:35:16

    eloquent 上的 get() 方法返回一个 Laravel 集合,即您在其后放置的任何内容,例如where() 影响生成的集合,请参阅 https://laravel.com/docs/9。 x/collections,集合是一个类似于数组的对象,但具有大量类似于数据库查询的功能,但全部都在本地内存中。

    如果在 get() 之前有 where() 方法,则您正在构建数据库查询,并且直到 get() 才会执行该查询。您会得到不同的结果,因为查询构建和收集方法的工作方式相似,但它们执行不同的操作。

    回复
    0
  • 取消回复