dqhsv0147421 2014-07-29 13:44
浏览 46

从自引用表中获取Laravel ORM中其他表的列获取N级层次结构JSON

I have two tables abc and def. I have models of these two tables named respectively Abc and Def. In Abc, I declare these two functions:

public function child()
{
   return $this->hasMany('Abc', 'parent');
}

// recursive, loads all descendants
public function children()
{
   return $this->child()->with('children')->orderBy('sort_order');  
}

// parent
public function parent()
{
   return $this->belongsTo('Abc','parent');
}

// all ascendants
public function parentRecursive()
{
   return $this->parent()->with('parentRecursive');
}

In controllers I called these functions by

$abc = Abc::with('children')->whereNull('parent')->get();

I have implemented level hierarchy JSON from table through parent child relation. I have common column name in both tables. Through these method I get the title column of abc table. But I want to fetch title column of def table. How we can do this?

  • 写回答

1条回答 默认 最新

  • drhzn3911 2014-07-30 07:23
    关注

    Using relation:

    // Abc model
    public function defs()
    {
      return $this->hasMany('Def', 'abc_id');
    }
    
    public function childrenWithDef()
    {
      return $this->child()->with('childrenWithDef.defs')->orderBy('sort_order');
    }
    
    // then:
    $abc = Abc::with('childrenWithDef', 'defs')->whereNull('parent')->get();
    
    // every Abc has related Def collection
    foreach ($abc->first()->defs as $def) $def->title
    

    or manually joining on the relation and selecting whatever you need:

    public function childrenWithTitle()
    {
       return $this->child()->with('children')->orderBy('sort_order')
         ->leftJoin('defs', 'defs.abc_id', '=', 'abcs.id')->select('abc.*', 'def.title');
    }
    

    Remember that you need keys/foreign keys to be selected in order to let Eloquent match children to their parents!

    $abc = Abc::with('childrenWithTitle')->whereNull('parent')->leftJoin(...)->first();
    $abc->childrenWithTitle->first()->title; // 'title' or null if no row found for this child
    
    评论

报告相同问题?

悬赏问题

  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教