В моем шоу.лезвие.php-файл когда я перебираю $ category - >posts я хотел бы исключить сообщение, которое отображается в view

В моем шоу.лезвие.php-файл когда я перебираю $ category - >posts я хотел бы исключить сообщение, которое отображается в view

24.06.2020 06:29:46 Источник

В моем клинке.php-файл, отображающий один пост, работает отлично. В Блейде у меня также есть доступ к категориям, связанным с post i. e $post->categories, и он тоже работает.

Единственный пост, который я показываю с самого начала .лезвие.php с заголовком В заголовке имеет только одну категорию, и это футбол.

Когда я перебираю Заголовок сообщения, связанный с категорией сообщения, отображаемого из.лезвие.php файл используя приведенный ниже код он работает хорошо и я получаю названия постов связанных с категорией футбол как и ожидалось!

 @foreach($post->categories as $category)
        @foreach($category->posts as $post)
            <p>{{ $post->title }}</p>
                <br>
        @endforeach
    @endforeach

Моя задача: я хотел бы исключить Заголовок сообщения, который также является заголовком отображаемого сообщения, чтобы я не повторял заголовок в нижней части моей страницы, который уже был в заголовке страницы.

МОЙ КОНТРОЛЛЕР!

    <?php
    
    namespace App\Http\Controllers\User;
    
    use App\Http\Controllers\Controller;
    use App\Model\user\post;
    
    use Illuminate\Http\Request;
    
    class PostController extends Controller
    {
        public function post(post $post)
        {
    
            return view('user.post', compact('post'));
        }
    }

    

Мой пост модель

<?php

namespace App\Model\user;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    public function tags()
    {
        return $this->belongsToMany('App\Model\user\Tag', 'post_tags')->withTimestamps();
    }

    public function categories()
    {
        return $this->belongsToMany('App\Model\user\Category', 'category_posts');
    }

    public function getRouteKeyName()
    {
        return 'slug';
    }
}

Моя Категория Модель


   

     <?php
        
        namespace App\Model\user;
        
        use Illuminate\Database\Eloquent\Model;
        
        class Category extends Model
        {
            public function posts()
            {
                return $this->belongsToMany('App\Model\user\post', 'category_posts');
        
            }
        
            public function getRouteKeyName()
            {
                return 'slug';
            }
        }

моя модель Category_post


    <?php
    
    namespace App\Model\user;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Category_post extends Model
    {
        public function posts()
        {
            return $this->belongsToMany('App\Model\user\Post', 'category_posts');
        }
    
    }

Пожалуйста, обратите внимание, что все работает отлично. Когда я перебираю заголовок $category - >posts в моем .лезвие.php-файл я получаю Заголовок сообщения, как и ожидалось. Теперь я просто хочу исключить название поста,который визуализируется лезвием.PHP-файл

У вопроса есть решение - Посмотреть?

Ответы - В моем шоу.лезвие.php-файл когда я перебираю $ category - &gt;posts я хотел бы исключить сообщение, которое отображается в view / In my show.blade.php file when I loop over $category->posts I would like to exclude the post that is being displayed by view

Является ответом!
FunkyMonk91

24.06.2020 08:00:59

Таким образом, похоже, что вы загружаете все сообщения, основанные на том, который вы хотите показать, через отношение $post->belongsTo(Category::class) (вот как я представляю себе вашу модель сообщений)

Я бы сделал вот что.

В моем контроллере:

class PostController extends Controller
{
    public function post(post $post)
    {
        // eager load the categories and their posts
        $post->load([
            'categories',
            // need to pass the selected post into the scope of the callback
            'categories.posts' => function ($query) use ($post) {
                // give us all the posts, besides this one, that belong to the category
                $query->where('id', '!=', $post->id)
            }
        ]);

        return view('user.post', compact('post'));
    }
}
Alphy Gacheru

25.06.2020 11:07:15

Следующий подход решает эту проблему путем добавления метода except в цикл. Вы также можете проверить подход @FunkyMonk91 в комментариях, который также решает проблему, достигая той же цели в контроллере!

  @foreach($post->categories as $category)
         @foreach($category->posts->except($post->id) as $catPost)
         <p>{{ $catPost->title }}</p>
         <br>
         @endforeach
     @endforeach 

https://laravel.com/docs/7.x/eloquent-collections?fbclid=IwAR1mnWJX5eCtXRbNnac7nAFUtR_Onk35Gqf7GRBweoz88iBQqZRGo65A-jg

Закрыть X