为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel Collection 通过键获取值之一

Laravel Collection 通过键获取值之一

PHP
Qyouu 2021-12-03 18:48:03
我是 Laravel 的新手,我试图通过从另一个集合中检索到的一个 ID 来获取一个集合中的一个值。我的函数返回 2 个集合:public function index(){    $category = BlogCategory::all(['id', 'name']);            $post = BlogPost::orderBy('id', 'desc')->take(14)->get();    return view('blog.index', ['posts' => $post],  ['categories' => $category]);}在 foreach 循环中,我从集合中获取值:    @foreach($posts as $post)     @if($loop->iteration > 2)        <div class="col-sm-6 col-md-3 d-flex justify-content-center other-post">          <a href="#">             <img src="#" alt="">             <p class="post-category">{{ $categories->get($post->category_id) }}</p>             <h5 class="post-title">{{ $post->title }}</h5>                                  </a>         </div>      @endif     @endforeach我部分得到了如下图所示的结果,但我只想得到名称。这是我想弄清楚的代码 {{ $categories->get($post->category_id) }}如果有更好或更正确的方法,请告诉我。博客文章迁移:public function up(){    Schema::create('blog_posts', function (Blueprint $table) {        $table->bigIncrements('id');        $table->string('title');        $table->longText('content');        $table->mediumText('slug');        $table->bigInteger('author_id')->unsigned();        $table->bigInteger('category_id')->unsigned();        $table->timestamps();        $table->foreign('author_id')->references('id')->on('blog_authors');        $table->foreign('category_id')->references('id')->on('blog_categories');    });}
查看完整描述

3 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

您应该建立BlogPost和BlogCategory模型之间的关系,看到您已经category_id在BlogPost模型中有一个字段,即:


在BlogPost型号中:


public function category(){

   return $this->belongsTo(\App\BlogCategory::class);

}

在BlogCategory型号中:


public function posts(){

   return $this->hasMany(\App\BlogPost::class);

}

接下来,您可以渴望的负载 categories与$posts在你的控制器只有两个疑问:


public function index()

{        

    $posts = BlogPost::with('category')->orderBy('id', 'desc')->take(14)->get();

    return view('blog.index', compact('posts'));

}

然后在您的视图中,您可以$post->category直接访问每个对象,因为在控制器中加载了热切:


@foreach($posts as $post)

 @if($loop->iteration > 2)

    <div class="col-sm-6 col-md-3 d-flex justify-content-center other-post">

      <a href="#">

         <img src="#" alt="">

         <p class="post-category">{{ $post->category->name }}</p>

         <h5 class="post-title">{{ $post->title }}</h5>                        

      </a>

     </div>

  @endif

 @endforeach


查看完整回答
反对 回复 2021-12-03
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

它可以优化,首先,您需要从类别到帖子建立一对多的关系


首先:确保您在帖子迁移category_id列中有


第二:打开类别模型并编写此方法,这将允许您获取属于该类别的帖子


public function posts(){

   return $this->hasMany(\App\Post::class);

}

第三:打开店铺模型并编写此方法,这将允许您获取属于帖子的类别


public function catgeory(){

   return $this->belongsTo(\App\Category::class);

}

最后:您将像这样编辑您的视图


@foreach($posts as $post)

    <div class="col-sm-6 col-md-3 d-flex justify-content-center other-post">

      <a href="#">

         <img src="#" alt="">

         <p class="post-category">{{ $post->category->title }}</p>

         <h5 class="post-title">{{ $post->title }}</h5>                        

      </a>

     </div>

 @endforeach

当然,您不会再在控制器中调用类别


public function index()

{        

  $post = BlogPost::orderBy('id', 'desc')->take(14)

          ->with('category')->get();

  return view('blog.index', ['posts' => $post]);

}


查看完整回答
反对 回复 2021-12-03
?
慕容708150

TA贡献1831条经验 获得超4个赞

此行为$categories->get($post->category_id)您返回一个数组category,因此这里的解决方案如下所示:

{{ $categories->get($post->category_id)['name'] }}


查看完整回答
反对 回复 2021-12-03
  • 3 回答
  • 0 关注
  • 274 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信