Laravel выборка данных из определенной категории - PullRequest
0 голосов
/ 28 октября 2019

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

Например: новости/ entertainment - будет сообщение из категории развлечений и т. д. ...

Это код для извлечения всех данных:

@php
  // use App\post_category;
  use Carbon\carbon;
  if (!isset($posts)) {
     $posts= App\post::latest()->paginate(6);

  }
@endphp

попытался заменить latest на мой categoryили post::post_category:entertainment, но не работает.

post.php

namespace App;

use Illuminate\Database\Eloquent\Model;

class post extends Model
{
public function post_category(){
    return $this->belongsTo(post_category::class);
}
public function cms_user(){
    return $this->belongsTo(cms_user::class);
}
// public function post_categories(){
//  return $this->hasMany('App\post_category');
// }
}

post_category.php

namespace App;

use Illuminate\Database\Eloquent\Model;

 class post_category extends Model
{
// public function posts(){
//  return $this->hasMany("App\post");
// }
// public function post(){
//  return $this->belongsTo(post::class);
// }
}

postcontroller.php

namespace App\Http\Controllers;
use App\post;
use App\post_category;
use Illuminate\Http\Request;

class PostController extends Controller
{
public function single($title){
    $post=post::where("title",str_replace("-"," ",$title))->first();
    if ($post!=null) {
    return view('noutati-detaliu',compact("post"));
    }else{
        echo '<h1>ERROR 404, Not Found!</>';
    }
}

public function category($category){
    $category=str_replace("-", " ",$category);
        $cat_id=post_category::where("name","$category")->pluck("id")->first();
    if ($cat_id==NULL) {
        echo "<h1> Invalied Category </h1>";
    }
               $posts=post::where("post_category_id",$cat_id)->latest()->paginate(6);
    if ($posts!=null) {
        return view("noutati",compact('posts'));
      }else{
        echo "<h1>ERROR 404, not found! </h1>";
    }
   }
   }

postcategorycontroler.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PostCategoryController extends Controller
{
//
}

Пожалуйста, совет!

Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Во-первых, вы должны сделать это в Controller и передать эту переменную для просмотра

$posts = \App\Post::join('post_categories', 'post_categories.id', '=', 'posts.post_category_id')->where('categories.slug', '=', $slug)->select('posts.*')->latest('posts.created_at')->paginate(6);

Но на вашем месте я сделаю это в контроллере: ($ slug - entertainment в вашем примере)

$category = \App\Category::where('slug', $slug)->with()->firstOrFail();

$posts = \App\Post::where('post_category_id', $category->id)->latest()->paginate(6);

return view('posts', compact('posts'));
0 голосов
/ 28 октября 2019

сначала вам нужно создать модель категории, если вы еще этого не сделали

post_category.php

public function posts()
{
  return $this->hasMany(post::class); //relationship
}

public function getRouteKeyName()
{
/*  If you would like model binding to use a database 
column other than id when retrieving a given model class, 
you may override the getRouteKeyName method*/
  return 'slug'; 
}

, затем создать таблицу для post_category

Schema::create('post_categories', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('name');
    $table->string('slug'); // add this
    $table->timestamps();
});

in post.php

public function category()
{
   return $this->belongsTo(post_category::class, 'post_category_id');
}

posts table

Schema::create('posts', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->unsignedBigInteger('post_category_id'); // make sure to add this
    $table->string('title');
    $table->timestamps();
});

web.php

Route::get('/news/{post_category}', 'PostsController@index');

PostsController.php / контроллер

use App\post_category.php
...
public function index(post_category $post_category)
{
  if ($post_category->exists) {
     $posts = $post_category->posts()->latest()->paginate(6);
  }else{
     $posts = null;
  }
  return $posts;
}

Надеюсь, это поможет, дайте мне знать, если у вас возникнут трудности с пониманием или ошибкой

...