我是Laravel的新手。我只想创建一个自引用模型。例如,我想创建一个产品类别,其中字段parent_id
与产品类别ID相同。这怎么可能?
模型如下所示
class Product_category extends Eloquent
{
protected $guarded = array();
public static $rules = array(
'name' => 'required',
'parent_id' => 'required'
);
function product_category()
{
return $this->belongsto('Product_category','parent_id');
}
}
结果达到了'100'的最大功能嵌套级别,正在中止!错误
答案 0 :(得分:54)
您可以为模型添加关系,并为关系字段设置自定义键。
class Post extends Eloquent {
function posts(){
return $this->hasMany('Post', 'parent_id');
}
}
修改强>
尝试这种结构
class Post extends Eloquent {
public function parent()
{
return $this->belongsTo('Post', 'parent_id');
}
public function children()
{
return $this->hasMany('Post', 'parent_id');
}
}
答案 1 :(得分:8)
您的模型不会产生" 100' 100的最大功能嵌套级别。达到"错误。这是XDebug的配置;增加xdebug.max_nesting_level
。
以下内容来自laracasts.com上的a 2015 post @sitesense:
这不是Laravel,Symfony或其他任何内容的错误。它仅在安装XDebug时发生。
这只是因为递归调用了100个或更多函数。这不是一个很高的数字,XDebug(> = 2.3.0)的更高版本已将此限制提高到256.请参见此处:
http://bugs.xdebug.org/bug_view_page.php?bug_id=00001100
编辑:事实上,最新的Homestead配置脚本已将限制设置为250.请参见第122行:
https://github.com/laravel/settler/blob/master/scripts/provision.sh#L122
因此,xdebug.max_nesting_level = 250
添加到php.ini
应该这样做。
答案 2 :(得分:3)
我根据您试图访问父母的评论为代码添加了一些内容!
class Person extends \Eloquent {
protected $fillable = [];
var $mom, $kids;
function __construct() {
if($this->dependency_id<>0) {
$this->mother->with('mother');
}
}
public function children() {
$children = $this->hasMany('Person','dependency_id');
foreach($children as $child) {
$child->mom = $this;
}
return $children;
}
public function mother() {
$mother = $this->belongsTo('Person','dependency_id');
if(isset($mother->kids)) {
$mother->kids->merge($mother);
}
return $mother;
}
}
然后您可以通过热切加载访问子项中的父项,请在此处查看更多内容: http://neonos.net/laravel-eloquent-model-parentchild-relationship-with-itself/
答案 3 :(得分:0)
您可以使用$ this
来介绍自己class Post extends Eloquent {
function posts(){
return $this->hasMany($this, 'parent_id');
}
}