У меня есть таблица User
и нужно разрешить пользователям иметь родительского пользователя.
таблица будет иметь поля:
-
id
-
parent_id
-
email
-
password
Как бы я определил это отношение самореализации в 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.