Я пытаюсь получить все comments
каждого сообщения из базы данных, используя ajax, но у меня возникли некоторые проблемы.
Вот проблема .
У меня есть home
маршрут, по которому я извлек все posts
из базы данных, и я не получил comments
в этих сообщениях.
Теперь я хочу получить comments
для каждого сообщения, используя Ajax, например, когда кто-то оставляет комментарий к сообщению, он должен быть добавлен в базу данных, а затем извлечен из базы данных на лету.
Комментарий добавлен через Ajax успешно, но я не могу получить их из базы данных, используя Ajax.
Вот мой код :
Контроллер
Route::get('/home', 'HomeController@index')->name('home');
index метод внутри HomeController
public function index()
{
$post = Post::all();
// I've used this approach to get comments
//$posts = Post::with('comments')->get();
return view('home')->with( array('posts'=>$posts ) );
}
Я перебрал все сообщения из базы данных, и поэтому у меня также есть форма внутри этого цикла, чтобы оставить комментарий к этому сообщению.
** Form
За оставление комментария **
@foreach($posts as $post)
<p>$post->description</p>
<div class="show_comments_{{ $post->id }}"></div>
<form action="{{ url('comment',$post->p_id) }}" method="POST" >
@csrf
<textarea
name="body"
placeholder="Write A Suggestion"
data-autosize-input='{ "space": 100 }'
rows="50" cols="100"
name="comment"
class="form-control comment body">
</textarea>
<input type="hidden" value="{{csrf_token()}}">
<!-- user Id of the logged In one -->
<input type="text" class="user_id" value="{{Auth::user()->id}}" name="user_id">
<!-- post id -->
<input type="text" class="post_id" name="post_id" value="{{$post->p_id}}">
<button type="button" class="btn btn-sm btn-danger formcomment" value = 'Comment' style="margin:10px;">Comment</button>
</form>
@endforeach
Когда я нажимаю кнопку Комментарий , запускается следующий код для вставки комментария в таблицу comments
.
Ajax Request
$(document).ready(function(){
$('.formcomment').on('click', function(e) {
e.preventDefault();
var form = $(this).closest('form');
// these are id's
var body = form.find('.body').val();
var post_id = parseInt(form.find('.post_id').val());
var user_id = parseInt(form.find('.user_id').val());
// alert(body);
// alert('this is post'+post_id);
// alert('This is user id'+user_id);
$.ajax({
type: "POST",
url: '/comment/'+post_id,
data: {body:body, post_id:post_id, user_id:user_id, _token: '{{csrf_token()}}'},
success: function(data) {
$(".show_comments_"+post_id).append("<div style = 'color:red;'>"+data.msg+"</div>");
$(".name_"+user_id).append("<div>"+data.user_id+"</div>")
}
});
});
});
Комментарии успешно добавлены в таблицу, упомянутую на изображении, и я получил их обратно в форме, упомянутой выше, но это происходит, когда я обновляю страницу, я хочу получить их, когда кто-то оставит комментарий к fly, поскольку он вставляется через ajax, но загружается после обновления страницы.
Обновлено
/comment
код здесь
public function storeComments(Request $request,Comment $body,$post_id){
if($request->ajax()){
$comment = new Comment;
$comment->user_id = Auth::user()->id;
$comment->post_id = $post_id;
$comment->body = Input::get('body');
$comment->save();
$response = array(
'status' => 'success',
'msg' => 'Setting created successfully',
);
return Response::json($response);
return 'yes';
}else{
return 'no';
}
}
таблица комментариев с фиктивными данными выглядит так
Я пытаюсь решить эту проблему за последние 2 дня, пожалуйста, помогите.
Спасибо
Ссылка, которую я изучил для этого: это