Laravel 雄辩的一对一通过(级别/树)关系
Posted
技术标签:
【中文标题】Laravel 雄辩的一对一通过(级别/树)关系【英文标题】:Laravel eloquent one to one through (level/tree) relationship 【发布时间】:2014-01-14 21:55:33 【问题描述】:嗨,我是 laravel 的新手(雄辩)。我正在尝试使用雄辩的 ORM 建立 一对一的(级别/树)关系。我有product_category
表有id
和parent_id
。
这是我的product_category
表
|-----|--------|-----------|
| id | name | parent_id |
|-----|--------|-----------|
| 1 | book | 0 |
| 2 |notebook| 1 |
这是我的product
表
|----|----------------|-------------|
| id | name | category_id |
|----|----------------|-------------|
| 1 | super notebook | 2 |
我希望能够仅从产品中的 subcategory_id 信息中提取父类别信息。这可能吗?
使用 SQL 时,这是查询(假设 category_id
为 2)
SELECT * FROM `product_category` WHERE `id` = (SELECT `parent_id` FROM `product_category` WHERE `id` = '2' )
更新:
这是我当前的实现
<?php
class Product extends Eloquent
public function subcategory()
return $this->hasOne('ProductCategory');
public function category()
// This should get the parent info of the subcategory
return ProductCategory::find($this->subcategory->parent_id);
【问题讨论】:
【参考方案1】:基本的 1-2-1 关系是这样完成的:
产品型号
class Product extends Eloquent
public function category()
return $this->hasOne('Category');
类别模型
class Category extends Eloquent
public function product()
return $this->belongsTo('Product');
现在您可以像这样查询数据:
Product::find(1)->category;
生成的 SQL:
select * from products where id = 1
select * from categories where product_id = 1
基本上你应该重命名你的列以匹配 laravel 默认值,否则设置像 $this->hasOne('Category', 'foreign_key');
这样的键
See docs also
【讨论】:
我已经做到了,问题是这种关系只适用于子类别。我希望关系通过类别(与子类别本身在同一个表中)。抱歉,如果它相当混乱,您可以查看我的示例表以更好地理解以上是关于Laravel 雄辩的一对一通过(级别/树)关系的主要内容,如果未能解决你的问题,请参考以下文章