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 ответа
Решение
Как я вижу, могут быть две проблемы:
- Внешний ключ в Hometype неверен (если вы используете имя столбца, отличное от "column"_id, вам нужно указать его)
- Возможно, вы выбираете запись 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 }}