Передать параметр в функцию отношения или альтернативное решение - PullRequest
0 голосов
/ 24 октября 2019

я знаю, что этот вопрос уже задавался, но ответы у меня не работают

у меня есть таблица с именем channel_posts с этой моделью

class ChannelPost extends Model
{

    function PostLike( ){
        return $this->hasMany('App\ChannelPostLike' ,'post_id');
    }

}

и есть channel_post_likesтаблица, в которой я храню лайки

channel_post_likes : id , post_id , user_id

теперь в моем шаблоне есть иконка .. если пользователю понравился пост, я хочу, чтобы он имел class="liked"

, чтобы я мог в своем контроллерепроверьте, понравился ли пользователю сообщение из БД, и отправьте его для просмотра ... но есть много вызовов ajax, которые частично обновляют шаблон ... например, если пользователь отправляет комментарий к сообщению, я обновляю шаблон через ответ ajax

    function comment_store(Request $request , $id ){

         //store in db

        echo json_encode(['html'=> view('include.channel-post-comment' , compact('comments' ,'post'))->render()]);
    }

это означает, что я должен проверить, понравился ли пользователь также посту здесь, и добавить его для просмотра

Мне было интересно, смогу ли я сделать это в шаблоне

как я могу добавить это отношение к ChannelPost модели

    function UserPostLike( $user_id ){
    return $this->hasOne('App\ChannelPostLike' ,'post_id')->where('user_id' , $user_id) ;
}

и в шаблоне я могу иметь

<i class="like-icon @if($post->UserPostLike(Auth::user()->id)) liked @endif "></i>

, но, конечно, это не работает ... так какая у меня альтернатива? я должен проверить это в контроллере FOPR каждый вызов, который обновил мой шаблон?

1 Ответ

0 голосов
/ 24 октября 2019
# ChannelPost
public function isLikedBy($user_id): bool
{
    return $this->PostLike->reduce(function ($carry, $item) use ($user_id) {
        return $carry || $item->user_id == $user_id;
    }, false);
}
<i class="like-icon {{ $post->isLikedBy(auth()->id()) ? 'liked' : '' }}"></i>
...