Laravel 4: Как получить доступ к данным из отношения ownTo()?

// models:
class Hometype extends Eloquent {
    public function development() {
        return $this->belongsTo('Development');
    }
}

class Development extends Eloquent {
    public function hometypes() {
        return $this->hasMany('Hometype', 'dev_id');
    }
}

с этим я могу сделать:

// controller:
$development = Development::where('stuff')->first();
// view:
@foreach ($development->hometypes as $hometype)
    {{ $hometype->stuff }}
@endforeach

что совершенно прекрасно.

но я не могу этого сделать:

// controller:
$hometype = Hometype::where('stuff')->first();
// view:
{{ $hometype->development->stuff }} // <- fails

Как получить доступ к полю в родительской модели разработки из $hometype?

Я прибегаю к:

'development' => Development::find($hometype->dev_id),

что кажется глупым

Возможный дубликат: Laravel 4 - Не удается получить данные в отношении один-ко-многим, но я не верблюжий корпус...

Также похоже на: Laravel 4 имеет отношение "один / принадлежит" (здесь нет ответов)

2 ответа

Решение

Как я вижу, могут быть две проблемы:

  1. Внешний ключ в Hometype неверен (если вы используете имя столбца, отличное от "column"_id, вам нужно указать его)
  2. Возможно, вы выбираете запись Hometype, строка разработки которой не существует

Доступ к данным и методам между hasMany и ownTo Сначала получите необходимые модели, а затем выполните цикл

Вот модель:

class ExpenseCategory extends Model
  public function expense_transactions()
  {
      return $this->hasMany('App\ExpenseTransaction');
  }


  class ExpenseTransaction extends Model
      public function expense_category()
      {  
          return $this->belongsTo('App\ExpenseCategory');
      }

Схема для вышеуказанной модели:

Schema::create('expense_transactions', function (Blueprint $table) {
    $table->increments('id');
    $table->unsignedInteger('expense_category_id')->nullable();
    $table->unsignedInteger('day_sheet_id')->nullable();
    $table->string('expense_title')->nullable();
    $table->unsignedInteger('amount');
    $table->timestamps();

$table->foreign('expense_category_id')
      ->references('id')->on('expense_categories')
      ->onDelete('cascade');

$table->foreign('day_sheet_id')
      ->references('id')->on('day_sheets')
      ->onDelete('cascade');

Схема для категории:

Schema::create('expense_categories', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->timestamps();  
    });

найти только данные о расходах для идентификатора дня в модели

$expenseTransactions = ExpenseTransaction::where('day_sheet_id', $id)->get();

показать доступ к имени их категории в блейде: в цикле foreach

@foreach($expense_transactions as $expense_transaction)
{{ $expense_transaction->expense_category->name  }}  
Другие вопросы по тегам