Зачем мне нужно first () в режиме просмотра лезвия с отношением один ко многим?

У меня две таблицы

Одна запись QUESTIONS_TITLES имеет много записей QUESTIONS. Названия содержат группу вопросов.

ВОПРОСЫ
id | вопрос | … | question_titles_id

QUESTIONS_TITLES
id | заглавие

МОДЕЛЬ ВОПРОС

class Question extends \Eloquent {

public function questionTitle() {
return $this->belongsTo('QuestionsTitle', 'question_titles_id');
}

}

МОДЕЛЬ ВОПРОС

class QuestionsTitle extends \Eloquent {

protected $fillable = ['title', 'question_cat_id', 'type'];
protected $table = 'questions_titles';

public function question() {
return $this->hasMany('Question');
}

}

в моем контроллере вопросов я делаю:

$questions = Question::all();
$this->layout->content = View::make('questions.index', compact('questions'));

на мой взгляд, я хочу группу вопросов с соответствующим родительским названием

 @foreach ($questions as $question)
<tr>
<td>{{ $question->questionTitle()->first()->title }}</td>
<td>{{ $question->id }}</td>
<td>{{ $question->question }}</td>
</tr>
@endforeach

это работает. но зачем мне сначала ()? это не выглядит чистым

когда я бросаю это, я получаю

Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$title (View:     /vagrant/app/views/questions/index.blade.php)

0

Решение

$question->questionTitle() возвращает объект BelongsTo, а не объект QuestionTitle. Когда вы звоните $question->questionTitle()->first() вы исполняете first() метод на отношения. Это благодаря магии ларавеллы дает вам правильный ответ. Хотя то, что вы действительно должны делать, это: $question->questionTitle->title, Когда вы получаете доступ к questionTitle Атрибут Laravel автоматически разрешает отношения для вас.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector