【问题标题】:Laravel eloquent issue getting db datasLaravel eloquent 问题获取数据库数据
【发布时间】:2016-03-16 11:10:54
【问题描述】:

我在通过 eloquent 从我的数据库中获取一些数据时遇到问题:

起初我这样做是为了从 clase_schedule 表中获取 'id' 和 'capMax':

$plazas = DB::table('clase_schedule')->select(['schedule_id', DB::raw('SUM(capMax) as capMax')])->groupBy('schedule_id')->get();

然后我想得到我之前得到的id与这张桌子上的id重合的table schedule的名称,像这样:

$nom_horarios = DB::table('schedule')->select('name')->where('id', 'in', $plazas->schedule_id)->get();

我得到这个错误:

"Trying to get property of non-object"

【问题讨论】:

  • 你在 var_dump($plazas) 上得到了什么??
  • 我得到一个包含两个值的数组,schedule_id 和 capMax,它是每组值的 sum(capMax) 的结果:array:2 [▼ 0 => {#483 ▼ +"schedule_id" : "2" +"capMax": "221" } 1 => {#482 ▼ +"schedule_id": "3" +"capMax": "12" } ]
  • 如果你得到数组,那么你应该使用循环再次查询数组中的值。
  • 做 foreach 我不知道为什么我只得到第一个:foreach ($plazas as $plaza) { $nom_horarios = DB::table('schedule')->select(' name')->where('id', 'in', $plaza->schedule_id)->get(); }

标签: php mysql database laravel eloquent


【解决方案1】:

因为$plazas 是一个数组,所以你应该循环$plazas 以在下一个查询中获取值,如下所示:

  foreach ($plazas as $plaza) 
    {
     $nom_horarios[] = DB::table('schedule')->select('name')->where('id', 'in',$plaza->schedule_id)->get(); 
    } 
    print_r($nom_horarios);

【讨论】:

  • 这个得到了解决方案,我错过了 $nom_horarios thnks 中的数组符号
  • 太棒了!!如果您发现此答案有帮助,请勾选它,以便将来对其他人有用::)。
【解决方案2】:

$plazas 返回一个项目数组,而不是 get(),使用 first()。这将返回单个项目。

$plazas = DB::table('clase_schedule')->select(['schedule_id', DB::raw('SUM(capMax) as capMax')])->groupBy('schedule_id')->first();

或者在foreach中循环广场

【讨论】:

  • 问题是我想要得到的是数组中每个项目的名称
  • 做 foreach 我不知道为什么我只得到第一个:foreach ($plazas as $plaza) { $nom_horarios = DB::table('schedule')->select(' name')->where('id', 'in', $plaza->schedule_id)->get(); }
  • 做 var_dump($plazas->count());看看你要返回多少个广场
  • 我在数组上得到了两个项目
【解决方案3】:

$plazas 变量中返回了什么?

我认为问题在于你得到的是一个收藏而不是一件物品......如果你只想得到一个广场,你应该->first()而不是->get()

【讨论】:

  • 我得到一个包含两个值的数组,schedule_id 和 capMax,它是每组值的 sum(capMax) 的结果:array:2 [▼ 0 => {#483 ▼ +"schedule_id" : "2" +"capMax": "221" } 1 => {#482 ▼ +"schedule_id": "3" +"capMax": "12" } ] 我想要得到的是每个 id 的名称餐桌时间表
  • 你可以做 $plazas->only('schedule_id'),这样你就可以得到 id,然后调用 in 操作符。像这样 $nom_horarios = DB::table('schedule')->select('name')->where('id', 'in', $plazas->only('schedule_id'))->获取();
  • 对不起,唯一的仍然会进入分隔数组。. map 函数可以修复 $this $plazas->map(function($obj){return $obj->schedule_id;} );
猜你喜欢
  • 2012-08-08
  • 2019-11-12
  • 2018-10-19
  • 2020-11-24
  • 1970-01-01
  • 2015-01-28
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
相关资源
最近更新 更多