为什么我需要刀片视图中的first()具有一对多的关系?

时间:2014-10-09 15:32:06

标签: php laravel blade

我有两张桌子

一个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

这个有效。但为什么我需要first()?它看起来不干净

当我放弃它时,我得到了

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

1 个答案:

答案 0 :(得分:1)

$question->questionTitle()返回一个BelongsTo对象,而不是QuestionTitle对象。当您致电$question->questionTitle()->first()时,您正在对该关系执行first()方法。这通过laravel魔术给你正确的答案。虽然你应该做的是:$question->questionTitle->title。当您访问questionTitle属性时,Laravel会自动为您解析关系。