【问题标题】:get collection of objects in laravel在 laravel 中获取对象的集合
【发布时间】:2020-09-27 16:55:23
【问题描述】:

在控制器中,我可以这样做:

$myentity = MyEntity::findOrFail($id);
$collection = MyEntity::where("field", "=", $myentity->value)->get();

这给了我一个 MyEntity 对象的集合...

dd($collection);
Collection {#331 ▼
  #items: array:11 [▼
    0 => MyEntity {#332 ▶}
    1 => MyEntity {#333 ▶}
    2 => MyEntity {#334 ▶}
    3 => MyEntity {#335 ▶}
    4 => MyEntity {#336 ▶}
    5 => MyEntity {#337 ▶}
    6 => MyEntity {#338 ▶}
    7 => MyEntity {#339 ▶}
    8 => MyEntity {#340 ▶}
    9 => MyEntity {#341 ▶}
    10 => MyEntity {#342 ▶}
  ]
}

我需要在 Model 类中实现一个方法,该方法返回完全相同的内容,但我没有让它正常工作。我尝试过这样的事情:

public function test()
{
    return = DB::table("entity")->where("field", "=", $this->value)->get();
}

...

$myentity = MyEntity::findOrFail($id);
$collection = $myentity->test();
dd($collection);
Collection {#319 ▼
  #items: array:10 [▼
    0 => {#309 ▶}
    1 => {#322 ▶}
    2 => {#308 ▶}
    3 => {#320 ▶}
    4 => {#324 ▶}
    5 => {#310 ▶}
    6 => {#315 ▶}
    7 => {#321 ▶}
    8 => {#325 ▶}
    9 => {#326 ▶}
  ]
}

我怎样才能得到相同的结果?

【问题讨论】:

  • 你不能使用查询生成器,它不会给你模型......你必须使用模型来做查询,就像你在模型之外做的那样

标签: laravel collections eloquent


【解决方案1】:

如果您使用DB::table,框架不知道要将结果转换为哪个 PHP 类。如果你使用MyModel::query()->where('foo', 'bar')->get(),它应该为Collection的每个成员自动创建一个MyModel的实例。

【讨论】:

  • 你不需要调用query() ...MyModel::where(....)动态创建 eloquent builder 实例
猜你喜欢
  • 1970-01-01
  • 2014-01-22
  • 2017-03-02
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
相关资源
最近更新 更多