【发布时间】:2014-07-30 19:05:47
【问题描述】:
我有两张桌子abc 和def。我有这两个表的模型,分别命名为Abc 和Def。在Abc中,我声明了这两个函数:
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');
}
在控制器中,我调用了这些函数
$abc = Abc::with('children')->whereNull('parent')->get();
我已经通过父子关系从表中实现了层次结构 JSON。我在两个表中都有共同的列名。通过这些方法,我得到了abc 表的标题列。但我想获取def 表的标题列。我们如何做到这一点?
【问题讨论】:
-
你没有告诉我们,这两者有什么关系,所以不可能提出具体的解决方案。猜测是:使用
joins。 -
谢谢 deczo....我已经通过 $abc = Abc::with('children') ->leftJoin('def', function($join) { $join->on ('abc.id', '=', 'def.abc_id'); }) ->whereNull('abc.parent') ->orderBy('sort_order', 'ASC') ->get([ 'abc. id', 'def.title' ]);通过这种方法,我从 def 表中获得了仅父行的标题....但是对于子行,我没有从 def 表中获取标题...它来自 abc 表。
-
每个
with运行它自己的查询,因此对于每个嵌套级别,您每次都需要join该表。我宁愿使用简单的关系Abc hasMany Def,以便使用来自相关对象的即时加载标题。 -
@deczo 你能粘贴示例代码吗??