Как реализовать модель самореференции (parent_id) в Eloquent Orm

У меня есть таблица User и нужно разрешить пользователям иметь родительского пользователя.

таблица будет иметь поля:

  • id
  • parent_id
  • email
  • password

Как бы я определил эту взаимосвязь самореференции в Eloquent ORM?

У меня был такой успех, используя вашу точную таблицу DB.

Модель пользователя :

 class User extends Eloquent { protected $table = 'users'; public $timestamps = false; public function parent() { return $this->belongsTo('User', 'parent_id'); } public function children() { return $this->hasMany('User', 'parent_id'); } } 

и тогда я мог бы использовать его в своем коде следующим образом:

 $user = User::find($id); $parent = $user->parent()->first(); $children = $user->children()->get(); 

Попробуйте и дайте мне знать, как вы справляетесь!

У меня была цепочка самореферентных контрактов (контракт может быть продолжен другим контрактом), а также необходим самостоятельный перевод. Каждый контракт имеет ноль или один предыдущий, а также нулевой или один следующий контракт.

Таблица моих данных выглядела следующим образом:

 +------------------+ | contracts | +------------------+ | id | | next_contract_id | +------------------+ 

Чтобы определить обратную связь (предыдущий контракт), вы должны инвертировать связанные столбцы, что означает установку * столбца внешнего ключа в таблице таблицы модели *, связанной с столбцом в родительской таблице (которая является одной и той же таблицей)

 <?php namespace App; use Illuminate\Database\Eloquent\Model; class Contract extends Model { // The contract this contract followed function previousContract() { // switching id and next_contract_id return $this->belongsTo('App\Contract', 'id', 'next_contract_id'); } // The contract that followed this contract function nextContract() { return $this->belongsTo('App\Contract'); // this is the same as // return $this->belongsTo('App\Contract', 'next_contract_id', 'id'); } } 

Дополнительную информацию см. В http://laravel.com/docs/5.0/eloquent#one-to-one .