За последние 24 часа нас посетили 20838 программистов и 1010 роботов. Сейчас ищут 364 программиста ...

Как узнать, что статья добавлена в закладки?

Тема в разделе "Laravel", создана пользователем Dimon2x, 5 апр 2019.

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    Таблицы:

    posts
    users


    posts_user - промежуточная - закладки

    Код (Text):
    1. $table->bigIncrements('id');
    2. $table->integer('user_id');
    3. $table->integer('post_id');
    Вывожу все статьи

    PHP:
    1. $allPosts = Posts::with('users')->get();
    PHP:
    1. class Posts extends Model
    2. {
    3.     //получить автора статьи
    4.  
    5.     public function users()
    6.     {
    7.         return $this->hasMany('App\User', 'id', 'user_id');
    8.     }
    Не знаю, что надо сделать, что бы к запросу ещё добавить ключ, что бы
    в цикле потом выводить, что статья уже добавлена, иначе добавить в закладки.
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
  3. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @mkramer

    Решил сделать так

    PHP:
    1. class Posts extends Model
    2. {
    3.     //получить автора статьи
    4.     public function users()
    5.     {
    6.         return $this->hasMany('App\User', 'id', 'user_id');
    7.     }
    8. //добавлен ли вопрос в закладки
    9.     public function bookmark()
    10.     {
    11.         return $this->belongsToMany('App\User');
    12.     }
    13. }
    PHP:
    1. $posts = Posts::all();
    2.        
    3.             foreach($posts as $post){
    4.                
    5.                 if($post->bookmark->count() != 0) {
    6.                       foreach($post->bookmark as $aaa) {
    7.                             if(Auth::id() == $aaa->id){
    8.                                echo 'Удалить из закладок' . '<br>';  
    9.                           }                  
    10.                           else {
    11.                               echo 'Добавить в закладки'. '<br>';
    12.                           }
    13.                            break;
    14.                     }
    15.                 }
    16.              
    17.                 else {
    18.                      echo 'Добавить в закладки'. '<br>';
    19.                  }
    20.                  echo '////////////////////<br>';
    21.              
    22.             }
    23.           dd();
    blade

    Код (Text):
    1. <div class="bookmark">
    2.                         @if($post->bookmark->count() != 0)
    3.                             @foreach($post->bookmark as $aaa)
    4.  
    5.                                 @if(Auth::id() == $aaa->id)
    6.                                 <button data-bookmark="{{$post->id}}" class="for-desctop">Удалить из закладок</button>
    7.  
    8.                                 @else
    9.                                 <button data-bookmark="{{$post->id}}" class="for-desctop">Добавить в закладки</button>
    10.                                 @endif
    11.                                 @break
    12.                             @endforeach
    13.  
    14.                         @else
    15.  
    16.                        <button data-bookmark="{{$post->id}}" class="for-desctop">Добавить в закладки</button>
    17.  
    18.                         @endif
    19.  
    20.  
    21. </div>
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Ну а зачем спрашивал, если ответ не учёл и написал чушь?
     
  5. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
  6. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    Переделал

    Код (Text):
    1. <div class="bookmark">
    2.                             @foreach($post->bookmark as $aaa)
    3.  
    4.                                 @if(Auth::id() == $aaa->id)
    5.                                     <button data-bookmark="{{$post->id}}" class="for-desctop">Удалить из закладок</button>
    6.                                     @break
    7.                                 @else
    8.                                     <button data-bookmark="{{$post->id}}" class="for-desctop">Добавить в закладки</button>
    9.                                     @break
    10.                                 @endif
    11.                             @endforeach
    --- Добавлено ---
    Не понятно, у одного пользователя выодит добавить, а у другого удалить, хотя у обоих добавлено
    --- Добавлено ---
    Вот так сделал и работает

    Код (Text):
    1. <div class="bookmark">
    2.                          
    3.                             @if($question->bookmark->contains(Auth::id()))
    4.                                 <button data-bookmark="{{$post->id}}" class="for-desctop">Удалить из закладок</button>
    5.                              @else
    6.                                 <button data-bookmark="{{$post->id}}" class="for-desctop">Добавить в закладки</button>  
    7.                              @endif
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Потому что у тебя сколько постов, столько запросов count, а если бы сделал так, как я по ссылке, laravel бы сотворил группирующий запрос
     
  8. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @mkramer Таким способом, он выводит сколько пользователей добавили, но не выводит какие

    PHP:
    1.  $posts = Posts::withCount('bookmark')->get();
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    @Dimon2x, ты реально до сих пор не в состоянии до конца прочесть документацию? Тем более я тебе намекнул даже
    upload_2019-4-8_14-28-8.png
    --- Добавлено ---
     
    Dimon2x нравится это.
  10. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @mkramer Я сделал так, вроде работает, правильно?

    PHP:
    1.   $posts = Post::withCount(['bookmark' => function ($query) {
    2.             $query->where('user_id', Auth::id());
    3.         }])->get();
    4.  
    5.         echo $posts[0]->bookmark_count;
    6.      
    7.             dump($posts);
     
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Угу :) Только в следующий раз читай сразу всё, чтоб носом тыкать тебя не приходилось :)
     
  12. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @mkramer я плохо знаю вложенные запросы, ларка выдала ошибку, на чистый SQL запрос, я подумал и додумался.