当前位置: 首页 > 知识库问答 >
问题:

Laravel按类别显示帖子

左丘源
2023-03-14

我在Laravel5.5中挣扎了一周,所以请大家帮我解决这个问题。

在我的数据库中,我有以下表格:

类别-id、创建时间、更新时间

类别翻译id、类别id、区域设置、用户id、名称、slug、创建时间、更新时间

团队-id、创建时间、更新时间

团队翻译-id、团队id、区域设置、标题、段塞、图像、正文、创建时间、更新时间

我使用Laravel可翻译的第三方从这里:https://github.com/dimsav/laravel-translatable

到目前为止,我已经成功地使用这些表创建了关系,在我的管理部分,我展示了创建的具有相关类别的团队。同样在首页,我在一页列表中显示所有团队。当我点击特定的团队时,它会显示团队页面。那太棒了。

我正在努力按类别展示团队。

这是我的代码。

类别模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Dimsav\Translatable\Translatable;

class Category extends Model
{
    use Translatable;

    public $translatedAttributes = ['name', 'slug', 'status', 'user_id', 'image', 'locale'];

    public function teams()
    {
        return $this->hasMany(Team::class);
    } 
}

类别翻译模型:

<?php

namespace App;

use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Model;

class CategoryTranslation extends Model
{
  use Sluggable;

  protected $touches = ['category'];
  public $timestamps = false;

  /**
   * Return the sluggable configuration array for this model.
   *
   * @return array
   */
  public function sluggable()
  {
      return [
          'slug' => [
              'source' => 'name',
              'onUpdate' => true
          ]
      ];
  }

  public function category() {
    return $this->belongsTo('App\Category');
  }
}

团队模式:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Dimsav\Translatable\Translatable;

class Team extends Model
{
    use Translatable;

    public $translatedAttributes = ['title', 'slug', 'body', 'status', 'user_id', 'image', 'category_id', 'locale'];

    public function category() {
       return $this->belongsTo(Category::class);
    }
}

团队翻译模式:

<?php

namespace App;

use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Model;

class TeamTranslation extends Model
{
    use Sluggable;

    protected $touches = ['team'];
    public $timestamps = false;

    /**
     * Return the sluggable configuration array for this model.
     *
     * @return array
     */
    public function sluggable()
    {
        return [
            'slug' => [
                'source' => 'title',
                'onUpdate' => true,
            ]
        ];
    }

    public function team() {
      return $this->belongsTo(Team::class);
    }
}

我的路线的一部分:

Route::get('/team/category/{category}', ['uses' => 'TeamController@teamCategory', 'as' => 'teamCategory']);

我的TeamController的一部分:

public function teamCategory(Category $category) {

  return $category;
}

这是我的观点:

@extends('layouts.frontend')

@section('title', __('t.team'))

@section('content')
  <div class="main team-list">
    <div class="container">
      <div class="col-md-3">
        <ul>
          @foreach($categories as $category)
            <li><a href="{{ route('teamCategory', $category->slug) }}">{{ $category->name }}</a></li>
          @endforeach
        </ul>
      </div>
      <div class="col-md-9">
        @foreach($teams as $team)
          @if($team->status == 1)
            <div class="row">
              <div class="image">
                <a href="{{ route('team.team', $team->slug) }}"><img width="120" src="{{ Storage::url($team->image) }}" ></a>
              </div>
              <div class="title">
                {{ $team->title }}
              </div>
              <div class="body">
                {!! str_limit($team->body, 300) !!}
              </div>
              <div class="category">
                  {{ $team->category ? $team->category->name : 'No category' }}
              </div>
              <a class="more">More</a>
            </div>
          @endif
        @endforeach
      </div>
    </div>
  </div>
@endsection

举个例子,我有一个类别名称php,所以在视图中,当我点击类别链接时,它会转到这个url:mywebsite.com/en/team/category/php,它会显示:

Sorry, the page you are looking for could not be found.

我尝试在类别模型中添加此方法:

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

它表明:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'slug' in 'where clause' (SQL: select * from `categories` where `slug` = php limit 1)

后来我也尝试过这个:

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

但它表明:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'name' in 'where clause' (SQL: select * from `categories` where `name` = php limit 1)

有人帮忙吗?

编辑:

我试过尼古拉这样的回答:

类别翻译模型:

<?php

namespace App;

use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Model;

class CategoryTranslation extends Model
{
  use Sluggable;

  protected $touches = ['category'];
  public $timestamps = false;

  /**
   * Return the sluggable configuration array for this model.
   *
   * @return array
   */
  public function sluggable()
  {
      return [
          'slug' => [
              'source' => 'category.slug',
              'onUpdate' => true
          ]
      ];
  }

  public function category() {
    return $this->belongsTo(Category::class);
  }
}

团队翻译模式:

<?php

namespace App;

use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Model;

class TeamTranslation extends Model
{
    use Sluggable;

    protected $touches = ['team'];
    public $timestamps = false;

    /**
     * Return the sluggable configuration array for this model.
     *
     * @return array
     */
    public function sluggable()
    {
        return [
            'slug' => [
                'source' => 'team.slug',
                'onUpdate' => true,
            ]
        ];
    }

    public function team() {
      return $this->belongsTo(Team::class);
    }
}

但它显示了同样的错误。

共有1个答案

杜砚
2023-03-14

尝试将translate类中的2个Slagable方法更新为:

分类翻译。php

/**
 * Return the sluggable configuration array for this model.
 *
 * @return array
 */
  public function sluggable()
  {
    return [
        'slug' => [
            'source' => 'category.slug',
            'onUpdate' => true
        ]
    ];
  }

TeamTranslation.php

/**
 * Return the sluggable configuration array for this model.
 *
 * @return array
 */
  public function sluggable()
  {
    return [
        'slug' => [
            'source' => 'team.slug',
            'onUpdate' => true
        ]
    ];
  }

以上代码基于官方文档,应该与您的实现一起使用

编辑:我刚刚注意到您正在获取错误的实体从您的控制器,尝试使用此代码代替

public function teamCategory(CategoryTranslation $category) {

  return $category;
}
 类似资料:
  • 我有模型用户,类别和邮政。帖子属于很多用户,很多类目。用户和类别不相关。我创建了一个自定义数据透视表,其中存储user_id和category_id,以及该表的模型类别块。我如何才能获得用户没有屏蔽的所有帖子?

  • 我目前试图使3个表之间的关系。 数据库

  • 我需要一些关于Woocommerce类别显示选项的帮助。在Wordpress仪表板中,我按照以下链接全局设置类别显示选项<外观- 有三种显示选项可用。 展示产品 目前,选择了第三个选项,它显示子类别以及父类别和子类别下的所有产品。但是,我想排除子类别下的所有产品。换句话说,我只想在父类别下显示子类别和产品。 我在几个教程网站上找到了以下片段。代码完全按照我想要的方式工作,但它也禁用了管理产品搜索和

  • 我正在尝试显示: 链接类别标题 类别描述(修剪到自定义长度) 分类”Readmore样式链接 该类别中的帖子标题列表,链接到帖子 我已经用Foreach循环完成了任务1-3,但是我似乎不能通过我过去使用的方法在每个类别中显示帖子标题。主要的问题是,我不知道如何运行get_posts();或者像它这样的函数,在$args数组中有一个变量。 我觉得这真的需要用Foreach循环来完成,因为我正在处理2

  • 嗨,我是拉威尔和我的新朋友,我试图在我的帖子和帖子评论之间建立一种关系。 我想用与posts id相同的post_id显示帖子上的所有评论。我认为应该是这样的。但是我不能让它工作。有什么建议吗? 在App\BlogComments中。php 在App\Post.php 在BlogCommentsController中: 在posts/show中。刀身php

  • 我试图在侧边栏中显示当前页面的类别和子类别。标题应该是当前类别的名称,并链接到当前类别。我正在努力实现的一个例子可以在侧边栏中看到:https://food52.com/shop/pantry 以下是我当前的网站示例:https://farmtofrank.wpengine.com/product-category/prepared-foods/ 这是我迄今为止创建的代码: 它可以工作,但会将父链

  • 更新2添加名称作为字段,而不是段塞,并添加the_title()只需给我一个页面标题的回声... 更新Jonnhyd23的代码非常有效!!谢谢有没有一种方法可以使术语变得动态?就像标题是阿姆斯特丹一样,我能做一些类似于

  • 这是我在这里的第一篇帖子,而且我是一个初学者,所以请耐心听我说。 我想完成的是创建一个AJAX函数,该函数将以复选框的形式列出所有可用类别,用户可以从中选择。选择并点击“应用”后,我想显示分配给所选类别的帖子中所有标签的列表(也以复选框的形式)。然后用户可以从可用的标签中进行选择,然后在点击最后的“应用”按钮后,将显示相应的帖子。 类似于TED. com的“你感兴趣的是什么?”但是在AJAX中。所