У меня, кажется, проблема с пониманием этого иерархического отношения.laravel eloquent relationship hierarchy
Farm> Поля> Чабаны> Овцы
Это кажется довольно простой иерархии - поля Farm hasMany, поле hasMany пастухов, пастух hasMany овец.
Овцы принадлежат пастуху, пастухи принадлежат к полям, поля принадлежат фермерским хозяйствам.
Я определил эту модель отношений таким образом:
class Sheep extends Model {
protected $fillable ['name'];
public function shepherd() {
return $this->belongsTo('App\Shepherd');
}
}
class Shepherd extends Model {
protected $fillable ['name'];
public function field() {
return $this->belongsTo('App\Field');
}
public function sheep() {
return $this->hasMany('App\Sheep');
}
}
class Field extends Model {
protected $fillable ['name'];
public function farm() {
return $this->belongsTo('App\Farm');
}
public function shepherd() {
return $this->hasMany('App\Shepperd');
}
}
class Farm extends Model {
protected $fillable ['name'];
public function field() {
return $this->hasMany('App\Field');
}
}
public function up()
{
Schema::create('farms', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
});
}
public function up()
{
Schema::create('fields', function (Blueprint $table) {
$table->increments('id');
$table->integer('farm_id');
$table->string('name');
});
}
public function up()
Schema::create('shepherds', function (Blueprint $table) {
$table->increments('id');
$table->integer('field_id');
$table->string('name');
});
}
public function up()
Schema::create('sheep', function (Blueprint $table) {
$table->increments('id');
$table->integer('shepherd_id');
$table->string('name');
});
}
Я бы ожидать, чтобы иметь возможность сохранить каждую модель следующим образом.
$farm = new App\Farm;
$farm->name = 'West Farm';
$field = new App\Field;
$field->name = 'The orchard';
$shepherd = new App\Shepherd;
$shepherd->name = 'Jason';
$sheep = new App\Sheep;
$sheep->name = 'Sean';
$farm->save();
$farm->field()->save($farm);
$farm->field->shepherd()->save($shepherd);
$farm->field->shepherd->sheep()->save($sheep);
Но это не сработает. Как только я доберусь до $farm->field->shepherd()->save($shepherd);
, процесс распадается. Я был бы признателен за помощь в правильном способе сохранения, используя отношения между всеми таблицами.
Я тяну свои волосы, пытаясь понять это, поэтому любая помощь будет принята с благодарностью.
благодаря
можете ли вы добавить некоторую информацию, такую как ошибки, ожидаемый выход/реальный выход и т. д.? –
Ошибка, которую я получаю, следующая: вызов неопределенного метода Illuminate \ Database \ Eloquent \ Collection :: shepherd(). Это происходит, когда я пытаюсь использовать $ farm-> field-> shepherd() -> save ($ shepherd). Но если я попробую $ field-> shepherd() -> save ($ shepherd), то это работает, почему я не могу делать $ farm-> field-> shepherd() -> save ($ shepherd)? – Basicmanthz