Я столкнулся с проблемой в проекте 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
Для историй, отмеченных как избранные, будет отображаться кнопка «Не добавить в избранное» с этой конкретной историей, которая будет добавлена в избранное при повторном нажатии на эту кнопку. Проблема в том, что здесь отображаются кнопки избранного и не избранного с этой конкретной историей, а не отображается кнопка для избранного, которая должна иметь эту кнопку, чтобы сделать ее избранной.
На самом деле все посты / истории динамические, которые будут добавляться разными пользователями. У каждого пользователя есть возможность выбрать любимые истории. Меня только смущает цикл foreach, если вы видите в моем представлении код, о котором я упоминал здесь. У меня две отдельные таблицы. 1-я таблица для рассказов и 2-я таблица для любимых_ историй. В обеих таблицах story_id - это общее поле.






попробуй это
Измените свой запрос в вашем контроллере:
// 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']?
Да, существует сеанс («имя пользователя») для пользователя, который вошел в систему. Итак, если этот конкретный вошедший в систему пользователь пометил конкретную историю как избранную, кнопка должна выглядеть как нежелательная, в противном случае история, которую зарегистрированный пользователь не сделал помечены как избранные, поэтому кнопка должна отображаться как избранные. Просто это то же самое, что и кнопка «нравится / не нравится» для каждого поста для конкретного пользователя, как в facebook. Надеюсь ты понимаешь мою проблему
Дайте каждой кнопке другой
id, напримерid = "favorite-post1", а затем кнопку удаления из избранного будет тот жеid = "unfavorite-post1"и продолжите тот же процесс для всех остальных сообщений. Вы также можете просто указать кнопкамauto_incrementedID записи, которой она принадлежит в БД. Итак, если сообщение 1 имеет идентификаторauto_incremented, равный 1, он получаетid = "1"и продолжает.