如何在 Eloquent Orm 中实现自引用 (parent_id) 模型
我有一个表,需要允许用户有一个父用户。User
该表将具有以下字段:
-
id
-
parent_id
-
email
password
我如何在Eloquent ORM中定义这种自我参照关系?
我有一个表,需要允许用户有一个父用户。User
该表将具有以下字段:
id
parent_id
email
password
我如何在Eloquent ORM中定义这种自我参照关系?
我取得了这样的成功,使用了您的确切数据库表。
用户型号:
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。