我有问题要显示我的产品有特定类别,这是我的表格迁移和模型: 产品迁移:
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');
}
}
我正在尝试显示所有class_id = 1的产品,此类别id = 1是我的T恤类别。我的控制器:
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.
}
答案 0 :(得分:2)
试试这个:
Category::find(catagory_id)->products;
示例:
Category::find(1)->products;
您还可以使用 where 子句:
示例:
Category::where('name', 't-shirt')->products;
答案 1 :(得分:1)
您必须在get()
模型语句的末尾添加Product
方法才能获得指定的结果:
$product_men = Product::where('category_id','=', $category->id)->orderBy('id', 'desc')->get();
dd($product_men);
以下是我在laravel
tinker
中使用的输出:
注意:如果您不使用get()
方法,则返回null或无效。
答案 2 :(得分:1)
这应该可以解决问题:
$category = Category::where('name', '=', 't-shirt')->orderBy('id', 'desc')->first();
$product_men = $category->products()->orderBy('id', 'desc')->get();