使用ManyToOne的动态属性(Laravel4 / Eloquent)

时间:2013-12-21 07:10:23

标签: laravel-4 eloquent

我有一个非常基本的关系,其中记录搜索并将其与执行搜索的用户的ID一起存储。

我正在尝试输出此日志并显示用户名而不是id。

搜索

public function user()
{ 
    return $this->belongsTo('User');
}

用户

public function searches()
{ 
    return $this->hasMany('Search');
}

如果我然后将Search::all();传递给视图,我该如何回显用户名?在许多其他事情中,我尝试过:

@foreach($searches as $search)
    <tr>
        <td>{{ $search->user->username }}</td>
        <td>{{ $search->description }}</td>
        <td>{{ $search->product }}</td>
        <td>{{ $search->group }}</td>
    </tr>
@endforeach

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

目前,您的循环有N + 1 problem

您的循环将执行1个查询以检索表中的所有Searches,然后针对每个search执行另一个查询以检索user。因此,如果您有20 searches,则此循环将运行21个查询。

<td>{{ $search->user->username }}</td>

要避免N + 1问题,请使用预先加载来加载关系。

Search::with('user')->all()

有关N + 1问题的更多信息:

http://laravel.com/docs/eloquent#eager-loading