簡體   English   中英

我如何回應這個?

[英]How do I echo this?

當我回應這個時:

<?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

部分控制器邏輯:

 $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');
  }

不需要你的第二種方法votesCount 您已經為投票定義了一個hasMany關系,如果您查詢它們,您只會獲得照片 ID 的投票。

要獲得票數,請在您看來執行以下操作:

$photo->votes->count();

你的控制器應該是這樣的:

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

像這樣回聲

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

但你也可以寫

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

嘗試這個:

由於它是一個 JSON 數組 json_decode 數組並回顯值

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

希望這是有幫助的。

您的$photos->votesCount返回一個字符串,您必須將其轉換為一個數組,如下所示:

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

或作為對象

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

我像這樣成功地進行了測試,並得到了 echo 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;

由於它是一個 JSON 數組,因此 json_decode 數組並回顯值:

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

不要忘記在json_decode添加第二個屬性true - 請參閱手冊

所以整個代碼:

<?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>";
  }
?>

votesCount 是一個數組。 所以就這樣回聲

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM