php - Laravel Eloquent 一对一通过(级别/树)关系

标签 php sql laravel eloquent

嗨,我是 laravel 的新手( Eloquent )。我正在尝试使用 Eloquent ORM 建立通过(级别/树)关系的一对一关系。我有 product_category 表,其中包含 idparent_id

这是我的product_category

|-----|--------|-----------|
| id  |  name  | parent_id |
|-----|--------|-----------|
|  1  |  book  |     0     |
|  2  |notebook|     1     |

这是我的产品

|----|----------------|-------------|
| 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-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:

从 id = 1 的产品中选择 *

从 product_id = 1 的类别中选择 *

基本上你应该重命名你的列以匹配 laravels 默认值,否则设置键 $this->hasOne('Category', 'foreign_key');

See docs also

关于php - Laravel Eloquent 一对一通过(级别/树)关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20798456/

相关文章:

php - while()中的数据如何划分?

sql - 在一个存储过程中输入缺失的月份并计算运行总计

php - Laravel 路由到 Vue.js 路由

php - 拉维尔 5 : Enable laravel-debugbar

laravel - 给分页添加参数

PhpUnit 当我使用 Mock Builder for Interface 时,我得到了正确的类

php - 微软从 PHP 8 开始终止对 PHP 的支持

PHP构造一个Unicode字符串?

php - 基于数字技能值创建 "teams"的算法

sql - 使用多列主键的优缺点是什么?