Я хочу, чтобы любимая кнопка для разных историй работала правильно

Я столкнулся с проблемой в проекте PHP Laravel. У меня есть любимая кнопка для рассказов. У разных пользователей будет возможность добавить понравившуюся историю в избранное. «Истории» и «Любимая_стория» имеют отдельные таблицы. Я получил все истории из таблицы историй и fav_story из таблицы «fav_story» на основе user_id.

Это мой код контроллера

public function fanfiction(){
    $user_id = session('userid');
    $data['stories'] = DB::Table('stories')->orderBy('story_id', 'des')->get();
    $data['fav_story'] = DB::Table('favorite_story')->where('user_id', $user_id)->get();
    return view('fanfiction', $data);
}

Это мой код просмотра

@foreach($stories as $row)
    <?php $story_id = $row->story_id; ?>
    <article class = "post excerpt">
        <a href = "{{ url('read_fanfic/'.$row->story_id) }}" id = "featured-thumbnail">
            <div class = "featured-thumbnail">
                @if ($row->img == '')
                <img class = "img-responsive" width = "30%" src = "{{ url('public/uploads/fanfic/no_img.png') }}" alt = "Story Image" />
                @else
                <img class = "img-responsive"  width = "30%" src = "{{ url('public/uploads/fanfic/'.$row->img) }}" alt = "Story Image" />
                @endif
            </div>                      
        </a>
        <div class = "post-content" style = "text-align:justify;">
            {{ $row->story_desc }};
            <h3>{{ $row->story_title }}</h3>
        </div>

        <div class = "readMore">
            @if (Session('username'))
                @foreach($fav_story as $row1)
                    @if ($row1->story_id == $story_id)
                    <a href = "{{ url('member/fav_story/'.$row->story_id) }}" style = "background:#59AAE1;" > Unfavorite</a>
                    @elseif ($story_id)
                        <a href = "{{ url('member/fav_story/'.$row->story_id) }}" style = "background:#1dbf73;" > Favorite</a>
                    @endif
                @endforeach
            @endif
        </div>
    </article>
@endforeach

Для историй, отмеченных как избранные, будет отображаться кнопка «Не добавить в избранное» с этой конкретной историей, которая будет добавлена ​​в избранное при повторном нажатии на эту кнопку. Проблема в том, что здесь отображаются кнопки избранного и не избранного с этой конкретной историей, а не отображается кнопка для избранного, которая должна иметь эту кнопку, чтобы сделать ее избранной.

Дайте каждой кнопке другой id, например id = "favorite-post1", а затем кнопку удаления из избранного будет тот же id = "unfavorite-post1" и продолжите тот же процесс для всех остальных сообщений. Вы также можете просто указать кнопкам auto_incremented ID записи, которой она принадлежит в БД. Итак, если сообщение 1 имеет идентификатор auto_incremented, равный 1, он получает id = "1" и продолжает.

JeanPaul98 28.12.2018 21:47

На самом деле все посты / истории динамические, которые будут добавляться разными пользователями. У каждого пользователя есть возможность выбрать любимые истории. Меня только смущает цикл foreach, если вы видите в моем представлении код, о котором я упоминал здесь. У меня две отдельные таблицы. 1-я таблица для рассказов и 2-я таблица для любимых_ историй. В обеих таблицах story_id - это общее поле.

Waqqar khan 28.12.2018 21:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
65
1

Ответы 1

попробуй это

Измените свой запрос в вашем контроллере:

// this will store all story ids in an array
$data['fav_story'] = DB::table('favorite_story')->where('user_id', $user_id)->pluck('story_id');

Ваш взгляд на лезвие

...
<div class = "readMore">
    @if (Session('username'))
       @if (in_array($row->story_id, $fav_story))
           <a href = "{{ url('member/fav_story/'.$row->story_id) }}" style = "background:#59AAE1;" > Unfavorite</a>
       @else
           <a href = "{{ url('member/fav_story/'.$row->story_id) }}" style = "background:#1dbf73;" > Favorite</a>
       @endif
    @endif
</div>
...

РЕДАКТИРОВАТЬ

обновить $row->id до $row->story_id

есть ли ценность в Session('username')? а можно мне dd $data['fav_story']?

veelasky 28.12.2018 23:05

Да, существует сеанс («имя пользователя») для пользователя, который вошел в систему. Итак, если этот конкретный вошедший в систему пользователь пометил конкретную историю как избранную, кнопка должна выглядеть как нежелательная, в противном случае история, которую зарегистрированный пользователь не сделал помечены как избранные, поэтому кнопка должна отображаться как избранные. Просто это то же самое, что и кнопка «нравится / не нравится» для каждого поста для конкретного пользователя, как в facebook. Надеюсь ты понимаешь мою проблему

Waqqar khan 28.12.2018 23:22

Другие вопросы по теме