【问题标题】:How do I echo this?我该如何回应这个?
【发布时间】:2016-01-26 18:02:30
【问题描述】:

当我回应这个时:

<?php echo $photo->votesCount ?>

我明白了

[{"photo_id":1,"votes":2}]

如何显示投票 (2)?

这是对象的一个​​ vardump:http://pastebin.com/ddAkRk4c

如果我输入:

<?php print_r( $photo->votesCount )?>

我明白了:http://pastebin.com/ZfE76WmB

完整视图:

2   @foreach($photos as $photo)                                                        
3   <li class='photo'>
4     <img src="{{URL::to('/')}}/uploads/{{$photo->name}}" width="150">                
5     <div>
6       <a href="{{route('photos.show',$photo->id)}}">{{ $photo->name }}</a>
7       <?php $photo_array = json_decode($photo);
8       echo $photo_array->votes; ?>
9     </div>
10   </li>
11   @endforeach

部分Controller逻辑:

 $photos = Photo::where('period_id', $currentPeriod)
                   ->with('votesCount')
                   ->get();
 return view('home', ['uploaded' => $uploaded, 'photos' => $photos, 'period' => $currentPeriod]);

型号:

  public function votes()
  {
      return $this->hasMany('App\Vote');
  }

  public function votesCount()
  {           
    return $this->votes()
      ->selectRaw('photo_id, count(*) as votes')
      ->groupBy('photo_id');
  }

【问题讨论】:

  • 使用print_r 而不是echo
  • 添加 print_r() 而不是 var_dump();
  • 如果有实际 Laravel 知识的人可以回答,那就太好了 - 必须有一种 Laravel 方法来访问这些值,到目前为止,所有答案似乎都是肮脏的解决方法
  • @Legionar 一定是这里打错了吗?我在我的代码中写

标签: php laravel object


【解决方案1】:

不需要你的第二种方法votesCount。您已经为投票定义了hasMany 关系,如果您查询它们,您只会获得照片 ID 的投票。

要计算选票,请在您的视图中执行以下操作:

$photo->votes->count();

你的控制器应该是这样的:

$photos = Photo::where('period_id', $currentPeriod)
                   ->with('votes')
                   ->get();

【讨论】:

  • 有没有一种简单的方法可以按票数对照片进行排序?也许在查询中?
  • 看看这个答案,了解如何像您描述的那样修改您的收藏:stackoverflow.com/a/24208979/261713
【解决方案2】:

您的$photos-&gt;votesCount 返回一个字符串,您必须将其转换为数组,如下所示:

$str = $photos->votesCount //gets the string
$arr = json_decode($str, true)[0]; //convert it to an array
echo $arr['votes'];

OR 作为对象

$str = $photos->votesCount //gets the string
$obj = json_decode($str)[0]; //convert it to an object
echo $obj->votes;

【讨论】:

  • 我得到未定义的偏移量:0(两个答案)
  • 去掉[0] 部分。
  • 然后我得到第二个:试图获取非对象的属性而第一个得到:未定义的索引:投票
【解决方案3】:

试试这个:

因为它是一个 JSON 数组,所以 json_decode 数组并回显值

$photo_array = json_decode($photos->votesCount);
echo $photo_array['votes'];

希望这有帮助。

【讨论】:

    【解决方案4】:

    我像这样成功测试并让它回显 2:

    $str = '[{"photo_id":1,"votes":2}]';
    $arr = json_decode($str, true); //convert it to an array
    echo $arr[0]["votes"];
    

    所以它应该像这样为你工作

    $str = '$photo->votesCount';
    $arr = json_decode($str, true); //convert it to an array
    echo $arr[0]["votes"];
    

    如果这不起作用,请尝试将第一行更改为

    $str = (string)$photo->votesCount;
    

    【讨论】:

    • 我得到未定义的偏移量:0
    • 做了一个小修改,请再试一次,告诉我它是否有效。
    【解决方案5】:
    <?php echo $photos->votesCount->votes ?>
    

    但你也可以写

    {{ echo $photos->votesCount->votes; }}
    

    【讨论】:

    • 然后我得到未定义的属性:Illuminate\Database\Eloquent\Collection::$votesCount
    【解决方案6】:

    由于是 JSON 数组,所以 json_decode 数组并回显值:

    $photo_array = json_decode($photos->votesCount, true);
    echo $photo_array[0]['votes'];
    

    不要忘记在json_decode 中添加第二个属性true - 请参阅manual

    所以整个代码:

    <?php
      foreach ($photos as $photo) {
        echo "<li class='photo'>";
          echo "<img src='{{URL::to(\'/\')}}/uploads/{{$photo->name}}' width='150'>";
          echo "<div>";
            echo "<a href='{{route(\'photos.show\', $photo->id)}}'>{{ $photo->name }}</a>";
            $photo_array = json_decode($photo, true);
            echo $photo_array[0]['votes'];
          echo "</div>";
        echo "</li>";
      }
    ?>
    

    【讨论】:

    • 我认为,还有一个索引为 0。当您在这两行之间插入时会得到什么:print_r($photo_array);?
    • 数组 ([0] => 数组 ([photo_id] => 1 [votes] => 2))
    • 未定义偏移量:0。还有一个 foreach,所以我在您的代码中将 $photos 更改为 $photo(以及在此处回答的所有其他代码:P)
    • 如果print_r 返回了那个,那么$photo_array[0]['votes'] 就可以了……你肯定在别处有错误。
    • 如果我删除那部分代码,那么我的视图会正常加载而不显示投票计数。如果你不相信我,你可以来我的teamviewer :)
    【解决方案7】:

    像这样回声

    <?php echo $photos->votesCount->votes ?>
    

    【讨论】:

    • 然后我得到未定义的属性:Illuminate\Database\Eloquent\Collection::$votesCount
    【解决方案8】:

    votesCount 是一个数组。所以就这样呼应吧

    <?php echo $photos->votesCount['votes'] ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多