[英]Laravel 5: in_array() expects parameter 2 to be array, object given
我试图传递一个数组与登录用户的投票从控制器到视图的帖子,但我一直收到此错误
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);
}
视图
@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() !!}
您需要将集合转换为数组。 只需将toArray()
附加到您的查询,如下所示,因为'toArray()'将集合转换为普通的PHP数组:
$votes = Auth::user()->votes()->get()->toArray();
希望这有帮助。
我认为采摘会解决你的问题。
$voteIds = Auth::user()->votes()->get()->pluck('id')->toArray();
您可以使用toArray()
方法将集合转换为其他建议的数组。 但我宁愿改变
in_array($post->id, $votes)
至
$votes->contains($post->id)
以上仅在$votes
是ID集合时有效。 例如。 当你使用
$votes = Auth::user()->votes()->pluck('post_id');
但是,您需要使用当前的控制器代码
$votes->contains('post_id', $post->id);
因为$votes
是Vote
对象的集合,您只想在post_id
列/属性中搜索。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.