需要在 Laravel 4 的同一张表中设置一对多关系

Posted

技术标签:

【中文标题】需要在 Laravel 4 的同一张表中设置一对多关系【英文标题】:Need to set a 1 to many relationship in the same table in Laravel 4 【发布时间】:2015-05-09 21:58:08 【问题描述】:

我有以下型号

类别:

<?php

class Category extends Eloquent 
    protected $table = "category";
    protected $fillable = array('title','parent','metatit','metadsc','metake','metaurl','image');
    public function categoryitems()
        return $this->hasMany('CategoryItem','catid');
    
    public function parent()
        return $this->hasMany('category','parent');
    
    public function child()
        return $this->belongsTo('Category','parent');
    

需要在分类表中设置一对多关系 Ex 类别“城市”是类别“国家”的子类别

当我尝试使用以下代码时发生错误

<?php

$parent = Category::where('id','=',$cat->id)->parent;
echo $parent->title;

?>

错误:

错误异常 (E_UNKNOWN) 未定义属性:Illuminate\Database\Eloquent\Builder::$parent(查看:/var/www/phpWithAngulerJS/app/views/admin/category-edit.blade.php)

【问题讨论】:

【参考方案1】:

首先,修复如下关系:

public function children() 
    return $this->hasMany('Category','parent');

public function parent() 
    return $this->belongsTo('Category','parent');

而且你的查询需要先执行:

$parent = Category::where('id','=',$cat->id)->first()->parent;
// btw since you have $cat, you probably can do simply:
$cat->parent;

echo $parent->title;

【讨论】:

以上是关于需要在 Laravel 4 的同一张表中设置一对多关系的主要内容,如果未能解决你的问题,请参考以下文章

如何在greenDAO中设置一对多的关系?

如何在 Core Data 中设置一对多关系的排序?

使用 Android 房间数据库在同一张表中的一对多关系

使用 Hyn/多租户在 Laravel 项目中设置测试

如何通过多对多关系获取与同一张表相关的行 - Laravel

Laravel 定义同一张表的多对多关系