2016-05-21 4 views
1

У меня есть проблема, чтобы показать свои продукты, которые имеют определенную категорию, это моя таблица миграция и модель: продуктов миграция:Laravel 5,1 - фильтр данных вида с отношением

Schema::create('products', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('name', 255); 
      $table->string('slug'); 
      $table->text('description'); 
      $table->string('extract', 300); 
      $table->decimal('price', 5, 2); 
      $table->string('image', 300); 
      $table->boolean('visible'); 
      $table->integer('user_id')->unsigned(); 

      $table->foreign('user_id') 
        ->references('id')->on('users') 
        ->onDelete('cascade'); 

      $table->integer('category_id')->unsigned(); 

      // relations 
      $table->foreign('category_id') 
        ->references('id') 
        ->on('categories') 
        ->onDelete('cascade'); 

      $table->timestamps(); 

модель продукт

<?php 

namespace dixard; 

use Illuminate\Database\Eloquent\Model; 

use dixard\User; 

use dixard\Category; 

use dixard\OrderItem; 

use dixard\Color; 

class Product extends Model 
{ 

    protected $table = 'products'; 

    protected $fillable = 

    [ 
    'name', 
    'slug', 
    'description', 
    'extract', 
    'image', 
    'visible', 
    'price', 
    'category_id', 
    'user_id' 

    ]; 



    public function user() { 
      return $this->belongsTo('dixard\User'); 


    } 

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

    } 

    public function OrderItem() { 
      return $this->belongsTo('dixard\OrderItem'); 

    } 


    public function Color() { 
      return $this->belongsTo('dixard\Color'); 

    } 

} 

Категория миграции

Schema::create('categories', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('name', 255)->unique(); 

      $table->string('slug'); 
      $table->text('description'); 

      $table->string('color', 30); 

      //$table->timestamps(); 
     }); 

категории Модель

use dixard\Product; 

class Category extends Model 
{ 
    protected $table = 'categories'; 

    protected $fillable = [ 

    'name', 
    'slug', 
    'description', 
    'color', 


    ]; 
    public $timestamps = false; 

    public function products() { 

     return $this->hasMany('dixard\Product'); 

    } 

} 

Я пытаюсь показать все продукты категории category_id = 1, эта категория id = 1 - моя категория футболок. Мой контроллер:

use dixard\Product; 
use dixard\Category; 

class TshirtController extends Controller 
{ 

     public function men_tshirt() 
     { 
      $category = Category::where('name', '=', 't-shirt')->orderBy('id', 'desc')->first(); 
      $product_men = Product::where('category_id','=', $category->id)->orderBy('id', 'desc'); 

      dd($product_man) OR 
      return view('store.shop.men',compact('product_men')); 

      // It doesnt work, doesnt show me nothing. 

     } 

ответ

1

Попробуйте это:

Category::find(catagory_id)->products; 

Пример:

Category::find(1)->products; 

Вы можете также использовать где пункт:

Пример:

Category::where('name', 't-shirt')->products; 

См: https://laravel.com/docs/5.1/eloquent-relationships

+0

Спасибо за вашу помощь! он работает да! как категория i добавил другое отношение GENDER, как я могу получить все продукты, которые имеют определенную категорию и определенный пол? gender = мужчины, например. Спасибо за помощь! –

1

Вы должны добавить get() метод в конце Product модели заявление, чтобы получить указанный результат:

$product_men = Product::where('category_id','=', $category->id)->orderBy('id', 'desc')->get(); 

dd($product_men); 

и вот вывод, который я работаю в laraveltinker:

enter image description here

НЕТ TE: Если вы не используете метод get(), он возвращает null или ничего.

1

Это должно сделать трюк:

$category = Category::where('name', '=', 't-shirt')->orderBy('id', 'desc')->first(); 
$product_men = $category->products()->orderBy('id', 'desc')->get(); 
Смежные вопросы