【发布时间】:2013-06-04 10:20:13
【问题描述】:
我正在设置几个模型,想知道表结构和模型关系的正确方法。
假设我们有一个包含产品的商店,每个产品都有大小和颜色属性。
表products
- 身份证
- size_id
- color_id
- 价格
表sizes
- 身份证
- 姓名
表colors
- 身份证
- 姓名
模型
class Product extends Eloquent {
public function size() {
return $this->hasOne('Size', 'id');
}
public function color() {
return $this->hasOne('Color', 'id');
}
}
class Size extends Eloquent {
public function products() {
return $this->belongsTo('Product', 'size_id');
}
}
class Color extends Eloquent {
public function products() {
return $this->belongsTo('Product', 'color_id');
}
}
这样我可以使用{{ Product->size['name'] }} 轻松地呼应产品的颜色/尺寸。另外,我想传递大小的外键 size.id 像 Product::where('size_id', '5') 而不是它的名称 size.name。
问题: 执行 $products = Product::has('size', '=', '5')->get() 不会给我任何结果,但执行 $products = Product::where('size_id', '5')->get() 会。
我很困惑,出了什么问题?
【问题讨论】:
-
您的外部约束设置是否正确?
-
@RobW 我刚刚编辑了帖子,你的意思是
$this->belongsTo('Size', 'size_id');? -
还有,你不是说
$products = Product::has('size', '>=', 5)->paginate(15) -
@RobW 这给了我错误
Call to undefined method Illuminate\Database\Query\Builder::sizes() -
抱歉,修正了我的评论。
标签: php mysql laravel laravel-4 eloquent