Таблицы: posts users posts_user - промежуточная - закладки Код (Text): $table->bigIncrements('id'); $table->integer('user_id'); $table->integer('post_id'); Вывожу все статьи PHP: $allPosts = Posts::with('users')->get(); PHP: class Posts extends Model { //получить автора статьи public function users() { return $this->hasMany('App\User', 'id', 'user_id'); } Не знаю, что надо сделать, что бы к запросу ещё добавить ключ, что бы в цикле потом выводить, что статья уже добавлена, иначе добавить в закладки.
Посчитай связанных юзеров, в доке описаны запросы со счётчиками. --- Добавлено --- И доп. условия к этим запросам --- Добавлено --- https://laravel.com/docs/master/eloquent-relationships#counting-related-models
@mkramer Решил сделать так PHP: class Posts extends Model { //получить автора статьи public function users() { return $this->hasMany('App\User', 'id', 'user_id'); } //добавлен ли вопрос в закладки public function bookmark() { return $this->belongsToMany('App\User'); } } PHP: $posts = Posts::all(); foreach($posts as $post){ if($post->bookmark->count() != 0) { foreach($post->bookmark as $aaa) { if(Auth::id() == $aaa->id){ echo 'Удалить из закладок' . '<br>'; } else { echo 'Добавить в закладки'. '<br>'; } break; } } else { echo 'Добавить в закладки'. '<br>'; } echo '////////////////////<br>'; } dd(); blade Код (Text): <div class="bookmark"> @if($post->bookmark->count() != 0) @foreach($post->bookmark as $aaa) @if(Auth::id() == $aaa->id) <button data-bookmark="{{$post->id}}" class="for-desctop">Удалить из закладок</button> @else <button data-bookmark="{{$post->id}}" class="for-desctop">Добавить в закладки</button> @endif @break @endforeach @else <button data-bookmark="{{$post->id}}" class="for-desctop">Добавить в закладки</button> @endif </div>
Переделал Код (Text): <div class="bookmark"> @foreach($post->bookmark as $aaa) @if(Auth::id() == $aaa->id) <button data-bookmark="{{$post->id}}" class="for-desctop">Удалить из закладок</button> @break @else <button data-bookmark="{{$post->id}}" class="for-desctop">Добавить в закладки</button> @break @endif @endforeach --- Добавлено --- Не понятно, у одного пользователя выодит добавить, а у другого удалить, хотя у обоих добавлено --- Добавлено --- Вот так сделал и работает Код (Text): <div class="bookmark"> @if($question->bookmark->contains(Auth::id())) <button data-bookmark="{{$post->id}}" class="for-desctop">Удалить из закладок</button> @else <button data-bookmark="{{$post->id}}" class="for-desctop">Добавить в закладки</button> @endif
Потому что у тебя сколько постов, столько запросов count, а если бы сделал так, как я по ссылке, laravel бы сотворил группирующий запрос
@mkramer Таким способом, он выводит сколько пользователей добавили, но не выводит какие PHP: $posts = Posts::withCount('bookmark')->get();
@Dimon2x, ты реально до сих пор не в состоянии до конца прочесть документацию? Тем более я тебе намекнул даже --- Добавлено ---
@mkramer Я сделал так, вроде работает, правильно? PHP: $posts = Post::withCount(['bookmark' => function ($query) { $query->where('user_id', Auth::id()); }])->get(); echo $posts[0]->bookmark_count; dump($posts);
@mkramer я плохо знаю вложенные запросы, ларка выдала ошибку, на чистый SQL запрос, я подумал и додумался.