【问题标题】:Cannot use hasMany relationship on for loop in view (Laravel)不能在视图中的 for 循环上使用 hasMany 关系(Laravel)
【发布时间】:2019-04-14 00:34:10
【问题描述】:

我正在尝试编写一个具有多个“位置”的应用程序,用户可以将这些位置添加为他们的收藏夹。我有一个 Locations 模型、一个收藏夹模型和一个数据库表,我在其中记录 user_id 和 location_id 对以指示用户最喜欢的位置。

在我的 Location 模型中,我定义了以下 hasMany 关系:

public function favorites(){
  return $this->hasMany(Favorite::class);
}

我还定义了Favorite模型上的反比关系如下:

public function location(){
  return $this->belongsTo(Location::class);
}

然后在一个视图中,我试图获取所有位置的列表,并标记用户标记为收藏的位置。为此,我遍历所有位置,并尝试计算该位置有多少收藏夹。它应该是 1 或 0,因为 user_id/location_id 组合行仅在用户将特定位置作为他的最爱时才存在。

这是代码的相关部分(我将位置列表传递给视图):

@foreach ($Locations_List as $Location)
      {{ $Location->favorites()->get()->count }}
@endforeach

这是我传递 $Locations_List 的方式:

  public function Create_SearchResults(){

$Locations_List = Location::select('id', 'Name', 'Category', 'Logo', 'Status', 'Address_Number', 'Address_Street', 'Address_City', 'Updated_At')
  ->where('Status', '>=', 500)
  ->get();

return view('Location_Search/Index', compact('Locations_List'));

}

但是,当我尝试上述操作时,我得到“此集合实例上不存在属性 [count]。”。

我尝试在 tinker 中做与上述类似的事情,它确实有效。但是,我必须按如下方式解析其中的“数组”部分:

$loc = App\Location::find(2);
$loc->favorites()->get()->count();

如何解决视图上的“数组”问题?提前致谢

【问题讨论】:

  • 如何获得$Locations_List 变量,请显示您的控制器代码。而且,你不应该在循环中调用 get(),而是使用 EagerLoading
  • 您的问题中缺少代码中最重要的部分,因此任何人都很难在这里为您提供帮助。错误告诉您$Locations_List 是一个数组,它不能在数组上调用函数favourites(),这是正确的。这应该立即触发你的想法,等等,为什么它是一个数组?它应该是模型的集合。因此,正如@Zuko 所说,请分享您定义$Locations_List 的位置,我们很可能会立即看到导致问题的原因。
  • 谢谢!我实际上并没有想到我传递 $Locations_List 的方式是潜在的问题。我确实是作为数组传递的,并且我已经如上所示进行了编辑。请参阅上面的控制器代码的编辑文本和我得到的更新错误。

标签: php laravel has-many


【解决方案1】:

foreach 循环中尝试{{ $Location->favorites->count() }}

或者,您可以通过添加

来预先加载控制器中的计数

->withCount('favorites') 初始化时$Locations_List:

$Locations_List = Location::select('id', 'Name', 'Category', 'Logo', 'Status', 'Address_Number', 'Address_Street', 'Address_City', 'Updated_At')
  ->withCount('favorites')
  ->where('Status', '>=', 500)
  ->get();

在这种情况下,您可以简单地将$Location->favorites_count 放入foreach 循环中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 2015-04-23
    • 2023-01-12
    • 2021-06-15
    相关资源
    最近更新 更多