How to create self referential relationship in laravel?

前端 未结 4 847
臣服心动
臣服心动 2020-12-02 18:03

I am new to Laravel. I Just want to create a self referential model. For example, I want to create a product category in which the field parent_id as same as pr

相关标签:
4条回答
  • 2020-12-02 18:42

    you can refer self, using $this

    class Post extends Eloquent {
    
        function posts(){
            return $this->hasMany($this, 'parent_id');
        }
    }
    
    0 讨论(0)
  • 2020-12-02 19:04

    Your model is not at fault for producing the "maximum function nesting level of '100' reached" error. It's XDebug's configuration; increase your xdebug.max_nesting_level.

    The following is from a 2015 post by @sitesense on laracasts.com:

    This is not a bug in Laravel, Symfony or anything else. It only occurs when XDebug is installed.

    It happens simply because 100 or more functions are called recursively. This is not a high figure as such and later versions of XDebug (>= 2.3.0) have raised this limit to 256. See here:

    http://bugs.xdebug.org/bug_view_page.php?bug_id=00001100

    EDIT: In fact the latest Homestead provisioning script already sets the limit to 250. See line 122 here:

    https://github.com/laravel/settler/blob/master/scripts/provision.sh#L122

    So the addition of xdebug.max_nesting_level = 250 to php.ini should do it.

    0 讨论(0)
  • 2020-12-02 19:04

    I've added a little more to the code based on your comments trying to access the parent!

    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;
        }
    }
    

    Then you can access the parent from the child with eager loading, see more here: http://neonos.net/laravel-eloquent-model-parentchild-relationship-with-itself/

    0 讨论(0)
  • 2020-12-02 19:09

    You can add a relation to the model and set the custom key for the relation field.

    class Post extends Eloquent {
    
        function posts(){
            return $this->hasMany('Post', 'parent_id');
        }
    }
    

    EDIT

    Try this construction

    class Post extends Eloquent {
    
        public function parent()
        {
            return $this->belongsTo('Post', 'parent_id');
        }
    
        public function children()
        {
            return $this->hasMany('Post', 'parent_id');
        }
    }
    
    0 讨论(0)
提交回复
热议问题