Laravel 5:in_array()期望参数2是数组,给定对象

Hal*_*nex 5 php arrays laravel laravel-5

我试图传递一个数组与登录用户的投票从控制器到视图的帖子,但我一直收到此错误

in_array()期望参数2是数组,给定对象(查看:C:\ xampp\htdocs\laravel-5\resources\views\subreddit\show.blade.php)

我试过用,lists()但我得到了这个错误Missing argument 1 for Illuminate\Database\Eloquent\Builder::lists()

使用lists('post_id')在标题中返回相同的错误.

调节器

public function show(Subreddit $subreddit)
{
    $posts = Subreddit::findOrFail($subreddit->id)->posts()->get();
    $votes = Auth::user()->votes()->get(); //I have also tried lists()

    return view('subreddit/show')
        ->with('subreddit', $subreddit)
        ->with('posts', $posts)
        ->with('votes', $votes);
}
Run Code Online (Sandbox Code Playgroud)

视图

@foreach($posts as $post)
    @if ($voted = in_array($post->id, $votes))
      {!! Form::open(['url' => 'votes', 'class' => 'votes']) !!}
    @endif
      <div class="upvote topic" data-post="{{ $post->id }}">
         <a class="upvote vote {{ $voted ? 'voted-on' : '' }}" data-value="1"></a>
         <span class="count">0</span>
         <a class="downvote vote {{ $voted ? 'downvoted-on' : '' }}" data-value="-1"></a>
      </div>
    {!! Form::close() !!}
Run Code Online (Sandbox Code Playgroud)

mda*_*mia 18

您需要将集合转换为数组.只需附加toArray()到下面的查询,因为'toArray()'将集合转换为普通的PHP数组:

 $votes = Auth::user()->votes()->get()->toArray(); 
Run Code Online (Sandbox Code Playgroud)

希望这有帮助.


小智 5

我认为 pluck 会解决你的问题。

$voteIds = Auth::user()->votes()->get()->pluck('id')->toArray();
Run Code Online (Sandbox Code Playgroud)


Pau*_*gel 5

您可以像使用其他建议的toArray()方法那样将集合转换为数组。但是我宁愿改变

in_array($post->id, $votes)
Run Code Online (Sandbox Code Playgroud)

$votes->contains($post->id)
Run Code Online (Sandbox Code Playgroud)

更新资料

仅当$votesID集合时,以上内容才有效。例如。当你使用

$votes = Auth::user()->votes()->pluck('post_id');
Run Code Online (Sandbox Code Playgroud)

但是,使用当前的控制器代码,您将需要使用

$votes->contains('post_id', $post->id);
Run Code Online (Sandbox Code Playgroud)

因为$votesVote对象的集合,所以您只想在post_id列/属性中搜索。