【问题标题】:Laravel 4 Eloquent/Model RelationshipsLaravel 4 雄辩/模型关系
【发布时间】: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.idProduct::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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-02-12
    • 2016-11-26
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    相关资源
    最近更新 更多