1

我正在设置几个模型,想知道表结构和模型关系的正确方法。

假设我们有一个包含产品的商店,每个产品都有属性 size 和 color。

桌子products

  • ID
  • size_id
  • color_id
  • 价格

桌子sizes

  • ID
  • 姓名

桌子colors

  • ID
  • 姓名

楷模

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'] }}. 另外,我想传递 Eloquent 大小的外键size.idProduct::where('size_id', '5')而不是它的 name size.name

问题:$products = Product::has('size', '=', '5')->get()不会给我任何结果,但做$products = Product::where('size_id', '5')->get()会。

我很困惑,到底出了什么问题?

4

1 回答 1

4

我认为问题在于您的::has()方法是在每个特定产品上寻找恰好有 5 种不同尺寸的产品,这会假设您将$this->hasMany('Size')在您的产品模型中使用。该::where()方法返回产品大小为 5 的结果。

在文档中,他们使用了注释示例。帖子将包含评论列表。您可以找到至少有 1 条评论的帖子(即。Post::has('comments')->get()),或者您可以找到超过 3 条评论的帖子(即。Post::has('comments', '>=', '3')->get())。

http://laravel.com/docs/eloquent#querying-relations

于 2013-06-14T06:40:26.707 回答